Ich habe einige Probleme beim Versuch, eine Javascript-Variable als WordPress-Abfrageparameter zu verwenden.
Ich sende ein Javascript-Array von post_ids
zu WordPress mit einem AJAX Post Request.
$.post('url', { data: requestIds }, function(response) { console.log(response) });
Ich versuche im Grunde, das Javascript-Array von ‘requestIds’ als zu übergeben post__in
WP_Query-Parameter.
$COMPARISON_QUERY = new WP_Query(array(
'post_type' => array('Post'),
'post__in' => // this is where the array would be passed as a parameter
));
Hier ist das PHP, das die Anfrage verarbeitet:
$response_object = DecodeJSONString($_POST['data']);
function DecodeJSONString($string) {
$decoded_string = json_decode($string);
return $decoded_string; // this would be the query parameter
}
Danke für jedes Feedback!
Anstatt in Ihre PHP-Datei zu posten, die die Arbeit direkt erledigt, sollten Sie Ihre Ajax-Anfragen verwenden WordPress-Ajax-Funktionen.
Angenommen, die von Ihnen verwendete benutzerdefinierte PHP-Datei heißt process_post.php
. Anstatt direkt in Ihre benutzerdefinierte PHP-Datei zu posten, posten Sie an admin-ajax.php
und bearbeiten Sie die Post in Ihrem functions.php
Datei.
Auf Ihrer Frontend-Seite:
<script>
var ajaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>"; // This will get the approriate ajax url using wordpress functionality
$.post( ajaxUrl,
{
'action': 'my_action',
'requestIds': requestIds // Assuming you have your requestIds var populated already
},
function(response) {
console.log(response)
});
</script>
Jetzt gibt es auf der PHP-Seite einen kniffligen/nicht intuitiven Teil über die Registrierung Ihrer Ajax-Aktion my_action
. Es ist eine Namenskonvention, bei der Sie den Aktionsnamen anhängen my_action
nach wp_ajax
Und wp_ajax_no_priv
. Beachten Sie, dass Sie Ihre Aktion nicht daran anschließen würden wp_ajax_no_priv
wenn normale Benutzer es nicht berühren sollen.
Das erste Argument ist die Namenskonvention, das zweite Argument ist der Name Ihrer benutzerdefinierten Funktion:
<?php // in functions.php
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
?>
Jetzt haben Sie Ihre Ajax-Aktion eingerichtet! Erstellen Sie nun Ihre Callback-Funktion, ebenfalls in functions.php
. Ich füge ab diesem Punkt oft nur die separate PHP-Datei wie folgt ein:
<?php // Still in functions.php
function my_action_callback(){
include_once('my_code.php');
}
?>
Jetzt, da Sie dies alles richtig eingerichtet haben, müssen Sie keine verschiedenen WordPress-Kernklassen mehr einbeziehen! Das ist der Hauptgrund für den ganzen Aufwand, es auf diese Weise einzurichten.
In my_code.php
was in meinem Beispiel in Ihrem Thema liegen würde:
<?php
$COMPARISON_QUERY = new WP_Query(array(
'post_type' => array('Post'),
'post__in' => json_decode( $_POST['requestIds'] ),
));
Also welche Probleme hast du??
– Steve
7. Dezember 2015 um 11:54 Uhr
Nun, um die WP_Query zu verwenden, muss ich Folgendes einfügen: define(‘WP_USE_THEMES’, false); require_once(‘../../../wp-load.php’); Dadurch wird jedoch die json_decode-Funktion unterbrochen und der Wert des Arrays auf „NULL“ gesetzt. Das heißt, wenn ich versuche, es als Parameter zu verwenden, übergebe ich nur NULL als post__in.
– connorb
7. Dezember 2015 um 11:56 Uhr
bitte einfach
var_dump($_POST)
und bearbeiten Sie Ihre Frage, um die Ausgabe anzuzeigen – möglicherweise senden Sie reguläre Schlüsselwertpaare, nicht json– Steve
7. Dezember 2015 um 12:00 Uhr
Danke Connor – könnten Sie bestätigen, ob die var_dump-Ausgabe für das Definieren und Erfordern von Zeilen bestimmt ist oder nicht? Es scheint ziemlich seltsam, dass Ihre Funktion abbrechen würde – aber vielleicht gibt es bereits eine Funktion mit diesem Namen – könnten Sie versuchen, sie einfach aufzurufen
json_decode
direkt?– Steve
7. Dezember 2015 um 12:13 Uhr
Niemals jemals verwenden
require_once('../../../wp-load.php')
Das Thema ist so abgedroschen, dass es irgendwo hängen bleiben sollte: ottopress.com/2010/dont-include-wp-load-Please ottopress.com/2010/…– dingo_d
7. Dezember 2015 um 12:29 Uhr