I am using a plugin (PHP code for Posts) that allows me to insert php code to my pages and posts. I have a table in my php code that I need to sort it using AJAX. What I have done so far is sorting the table by refreshing the page.
Basicaly there is an SQL querry that fills the table with the data.
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
$choise=$_REQUEST['c'];
//Η τιμή που έχει σταλεί από τη javascript συνάρτηση μέσω URL και δείχνει ποιο εξάμηνο είναι επιλεγμένο
$sem=$_REQUEST['sem'];
//Η τιμή που έχει σταλεί από τη javascript συνάρτηση μέσω URL και δείχνει ο τρόπος ταξινόμησης που είναι επιλεγμένος
$order=$_REQUEST['o'];
//Βρίσκουμε το τρέχον εξάμηνο
$query_current="select * from current_semester";
$result_current=mysql_query($query_current);
$element_current=mysql_fetch_row($result_current);
$sem1=$element_current[0];
//Αν δεν έχει οριστεί η κατηγορία των πτυχιακών(διαθέσιμες/ενεργές/οι πτυχιακές μου) θεωρούμε by default τις διαθέσιμες
if(!isset($_REQUEST['c']))
{
$choise='diath';
}
//Αν δεν έχει επιλεγεί κάποιο εξάμηνο θεωρούμε by default το τρέχον
if(!isset($_REQUEST['sem']))
{
$sem=$sem1;
}
//Αν δεν έχει οριστεί ο τρόπος ταξινόμησης θεωρούμε by default το asc
if(!isset($_REQUEST['o']))
{
$order='asc';
}
//Αν έχει οριστεί ο τρόπος ταξινόμισης εκτελείται το else
else
{
//Αν το URL λέει asc τότε στην μεταβλητή βάζουμε το αντίστροφο έτσι ώστε η επόμενη ταξινόμηση να γίνει desc
if($order=='asc')
{
$order='desc';
}
//Αν το URL λέει desc τότε στην μεταβλητή βάζουμε το αντίστροφο έτσι ώστε η επόμενη ταξινόμηση να γίνει asc
elseif($order=='desc')
{
$order='asc';
}
}
//Για τις Διαθεσιμές ΠΕ, ελέγχουμε επίσης αν έχει επιλεχθεί ταξινόμηση, το πεδίο ταξινόμησης και ο τρόπος ταξινόμησης
if(!isset($_REQUEST['o']))
{
$query_diss="select * from dissertations where status='0' order by dateassign desc, titlegr asc";
}
elseif($order=='asc')
{
$query_diss="select * from dissertations where status='0' order by ".$_REQUEST['f']." desc";
}
elseif($order=='desc')
{
$query_diss="select * from dissertations where status='0' order by ".$_REQUEST['f']." asc";
}
$result_diss=mysql_query($query_diss);
$num_row_diss=mysql_num_rows($result_diss);
//Αν βρέθηκαν ΠΕ σύμφωνα με τα κριτήρια/tabs που επιλέχθηκαν εκτελείται το if και εμφανίζονται οι ΠΕ
if($num_row_diss!=0)
{
//Οι Πτυχιακές και τα στοιχεία τους θα εμφανίζονται μέσα σε πίνακα
echo "<table id='thesis_table' width='100%' height='100%' class='sortable' style='overflow-x:auto'>";
echo "<tr>";
//Οι αναγνωριστικές στήλες του πίνακα ΠΕ - 3 από αυτές είναι links που λειτουργούν ως αλλαγή ταξινόμισης (καλούν javascript συνάρτηση)
echo "<td style='color:black; background:#038a91'><b>ΑΑ</b></td><b>";
?>
<td style='color:black; background:#038a91'><b><a href='#' id='titlegr' style='color: black' onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Τίτλος</a></b></td>
<td style='color:black; background:#038a91'><b><a href='#' id='semester' style='color: black' onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")' >Εξάμηνο</a></b></td>
<td style='color:black; background:#038a91'><b><a href='#' id='typeassign' style="color: black" onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Τύπος Ανάθεσης</a></b></td>
<?php
echo "<td style='color:black; background:#038a91'><b>Ανάθεση</b></td><b>";
?>
<td style='color:black; background:#038a91'><b><a href='#' id='sup_lastname' style="color: black" onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Επιβλέπων</a></b></td>
<?php
echo "<td style='color:black; background:#038a91'><b>Προαπ/να</b></td></tr>";
//Η διαδικασία γίνεται για όλες τις Πτυχιακές
while ($row = mysql_fetch_array($result_diss))
{
//Βάση του supervisor στον πίνακα dissertations, βρίσκουμε το ονοματεπώνυμο του επιβλέποντα στον πίνακα professors
$query_supervisor= "select * from professors where username='".$row['supervisor']."'";
$result_supervisor=mysql_query($query_supervisor);
$element_supervisor=mysql_fetch_row($result_supervisor);
//Αν στη βάση είναι null ο πρώτος φοιτητής σημαίνει ότι δεν την έχει αναλάβει κανένας φοιτητής ακόμα
//και αφήνουμε άδειες τις μεταβλητές που θα εμφανίζουν το ονοματεπώνυμο του φοιτητή
if($row['student1']==null)
{
$first_name_first_student="";
$last_name_first_student="";
}
//Αλλιώς με βάση τον ΑΜ βρίσκουμε το ονοματεπώνυμο του πρώτου φοιτητή και γεμίζουμε τις μεταβλητές
else
{
$query_first_student= "select * from students where am='".$row['student1']."'";
$result_first_student=mysql_query($query_first_student);
$element_first_student=mysql_fetch_row($result_first_student);
$first_name_first_student=$element_first_student[2];
$last_name_first_student=$element_first_student[3];
}
//Αν στη βάση είναι null ο δεύτερος φοιτητής σημαίνει ότι δεν την έχει αναλάβει κανένας φοιτητής ακόμα
//και αφήνουμε άδειες τις μεταβλητές που θα εμφανίζουν το ονοματεπώνυμο του φοιτητή
if($row['student2']==null)
{
$first_name_second_student="";
$last_name_second_student="";
}
//Αλλιώς με βάση τον ΑΜ βρίσκουμε το ονοματεπώνυμο του δεύτερου φοιτητή και γεμίζουμε τις μεταβλητές
else
{
$query_second_student= "select * from students where am='".$row['student2']."'";
$result_second_student=mysql_query($query_second_student);
$element_second_student=mysql_fetch_row($result_second_student);
$first_name_second_student=$element_second_student[2];
$last_name_second_student=$element_second_student[3];
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Βρίσκουμε ποιά προαπαιτούμενα έχουν οριστεί και τα εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
$i=0;
if(($row['course1']!="") && ($row['course1']!=NULL))
{
$courseArray_courses[$i] = $row['course1'];
$i++;
}
if(($row['course2']!="") && ($row['course2']!=NULL))
{
$courseArray_courses[$i] = $row['course2'];
$i++;
}
if(($row['course3']!="") && ($row['course3']!=NULL))
{
$courseArray_courses[$i] = $row['course3'];
$i++;
}
if(($row['course4']!="") && ($row['course4']!=NULL))
{
$courseArray_courses[$i] = $row['course4'];
$i++;
}
if($i==2)
{
$proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1];
}
elseif($i==3)
{
$proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1]."</br>3) ".$courseArray_courses[2];
}
else
{
$proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1]."</br>3) ".$courseArray_courses[2]."</br>4) ".$courseArray_courses[3];
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Βρίσκουμε ποιά tags έχουν οριστεί και τα εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
$i=0;
if(($row['tag1']!="") && ($row['tag1']!=NULL))
{
$courseArray_tags[$i] = $row['tag1'];
$i++;
}
if(($row['tag2']!="") && ($row['tag2']!=NULL))
{
$courseArray_tags[$i] = $row['tag2'];
$i++;
}
if(($row['tag3']!="") && ($row['tag3']!=NULL))
{
$courseArray_tags[$i] = $row['tag3'];
$i++;
}
if(($row['tag4']!="") && ($row['tag4']!=NULL))
{
$courseArray_tags[$i] = $row['tag4'];
$i++;
}
if($i==1)
{
$tags="1) ".$courseArray_tags[0];
}
elseif($i==2)
{
$tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1];
}
elseif($i==3)
{
$tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1]."</br>3) ".$courseArray_tags[2];
}
else
{
$tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1]."</br>3) ".$courseArray_tags[2] ."</br>4) ".$courseArray_tags[3];
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Βρίσκουμε ποιoί τύποι έχουν οριστεί και τους εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
$i=0;
if(($row['type1']!="") && ($row['type1']!=NULL))
{
$courseArray_types[$i] = $row['type1'];
$i++;
}
if(($row['type2']!="") && ($row['type2']!=NULL))
{
$courseArray_types[$i] = $row['type2'];
$i++;
}
if(($row['type3']!="") && ($row['type3']!=NULL))
{
$courseArray_types[$i] = $row['type3'];
$i++;
}
if($i==1)
{
$types="1) ".$courseArray_types[0];
}
elseif($i==2)
{
$types="1) ".$courseArray_types[0]."</br>2) ".$courseArray_types[1];
}
elseif($i==3)
{
$types="1) ".$courseArray_types[0]."</br>2) ".$courseArray_types[1]."</br>3) ".$courseArray_types[2];
}
else
{
$types="";
}
//Βρίσκουμε αν η ΠΕ είναι με απευθείας ανάθεση ή με διαγωνισμό
if($row['directassign']==1)
{
$assign="Απευθείας Ανάθεση";
}
else
{
$assign="Με διαγωνισμό";
}
//Χρησιμοποιούμε την μεταβλητή $aykswn για να αριθμούμε τα θέματα(ΠΡΟΣΟΧΗ δεν βάζουμε το id της ΠΕ γιατί δημιουργείται με auto increment
//και αυτό δημιουργεί προβλήματα - θα υπάρχουν δηλαδή κενά αριθμών αν γίνουν διαγραφές θεμάτων)
$aykswn++;
//Εμφανίζουμε για κάθε Πτυχιακή τον αύξων αριθμό, τον τίτλο,ομαδική/ατομική, ον/μο επιβλέπων, προαπαιτούμενα, tags, τύπο, και περισσότερα
//p=57 ειναι ο wordpress κωδικός της σελίδας 'Λεπτομέριες' για την πτυχιακή
echo "<tr>
<td>$aykswn</td>
<td><a href='?p=57&diss_id=$row[id]'><font color='038a91'>$row[titlegr]</font></td>
<td>$row[semester]</td>
<td>$row[typeassign]</td>
<td>$assign</td>
<td>$element_supervisor[2] $element_supervisor[1]</td>";
echo "<td style='width:240px'>$proap</td>
</tr>";
//Μηδενίζουμε τα arrays για να χρησιμοποιηθούν για την επόμενη ΠΕ
$courseArray_courses[0]="";$courseArray_courses[1]="";$courseArray_courses[2]="";$courseArray_courses[3]="";
$courseArray_tags[0]="";$courseArray_tags[1]="";$courseArray_tags[2]="";
$courseArray_types[0]="";$courseArray_types[1]="";$courseArray_types[2]="";$courseArray_types[3]="";$courseArray_types[4]="";$courseArray_types[5]="";
}
//Εδώ τελειώνει ο πίνακας
echo "</table>";
}
//Αν δεν βρέθηκαν ΠΕ σύμφωνα με τα κριτήρια/tabs που επιλέχθηκαν εκτελείται το else και εμφανίζεται κατάλληλο μήνυμα
else
{
echo "<p><p>";echo "Δεν βρέθηκαν Διαθέσιμες Πτυχιακές του εξαμήνου '".$sem."'";
}
?>
</body>
</html>
Here is the JS function for sorting:
function sort_diss_declar(c,f,o,sem)
{
//p=22 wordpress id of the "declartion" page (first image)
window.location = "?p=22&c=" + c + "&f=" + f + "&o=" + o + "&sem=" + sem;
}


evalyou can't just bootstrap WordPress to get the APIs, and you can't add a filter to recieve the request via WP AJAX, because that code only runs when your code is ran throughevalon that page, same problem withregister_rest_route. You're running down a dead end road at 60mph – Tom J Nowell♦ 53 mins ago.phpfiles – Tom J Nowell♦ 33 mins ago