Verwenden von Javascript-Variablen als WP_Query-Parameter

Lesezeit: 3 Minuten

Benutzeravatar von connorb
Konnorb

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!

  • 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

Benutzeravatar von Chizzle
Chizzle

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'] ),
));

  • Danke schön! Ich habe es geschafft, mein Problem mit einer sehr ähnlichen Methode wie der oben geposteten zu beheben! Allerdings musste ich meine Ajaxurl lokalisieren, da ich direkt von einer .js-Datei aus arbeitete. Dieses Video war unglaublich hilfreich, also für zukünftige Leute, die dieses Problem haben: youtube.com/watch?v=d01I9n8mbOU

    – connorb

    8. Dezember 2015 um 13:04 Uhr

1442510cookie-checkVerwenden von Javascript-Variablen als WP_Query-Parameter

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy