webentwicklung-frage-antwort-db.com.de

ruft the current user beitrags-id with the WP_Query-method ab

Ich habe diese Funktion in meinem functions.php

function get_blueprints_for_building () {

$args = array( 'post_type' => 'portfolio');

$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
    echo get_the_ID();
endwhile;
  exit();
}

dann ist diese Funktion verknüpft, damit sie von AJAX wie folgt aufgerufen werden kann:

add_action('wp_ajax_blueprints_for_building', 'get_blueprints_for_building');
add_action('wp_ajax_nopriv_blueprints_for_building', 'get_blueprints_for_building');

Das Problem, das ich habe, ist, wann immer ich mich auf einer bestimmten Seite befinde und diese Funktion ausgeführt wird, ich benötige die ID der aktuellen Seite, aber die Funktion gibt alle Seiten zurück, die mit dem post_type => portfolio übereinstimmen, nicht nur diejenige, die ich gerade bin beim.

Die Frage ist, wie ich diese nur eine Identifikation mit dem WP_Query zurückbekomme?

UPDATE - Was versuche ich hier zu erreichen?

Ich bin auf einer Seite, nennen wir es als Beispiel portfolio-1.

Sobald die Portfolio-1-Seite geladen ist, führe ich einen AJAX aus, der die oben erwähnte PHP-Funktion aufruft.

Ich möchte die ID dieser aktuellen Seite (das Portfolio-1) erhalten, da in einer anderen Tabelle in der Datenbank Informationen zu dieser Seite vorhanden sind, die durch die Seiten-ID verbunden sind. Bisher ist diese Datenbankabfrage nicht in der Funktion, da ich nur versucht habe, die ID der aktuellen Seite zu ermitteln. Wenn die ID angegeben ist, rufe ich einfach eine andere Funktion mit dieser ID als Parameter auf, wie zum Beispiel:

get_the_other_stuff($currentPageId)

Aber darum geht es momentan nicht. :)

1
Richard Zilahi

Da das AJAX auch von einer Suchmaschine von überall aufgerufen werden kann, sollten Sie die ID manuell übergeben. Dazu müssen Sie die ID Ihrer aktuellen Seite in Ihre Vorlage einfügen.

Es ist üblich, zusätzliche Informationen in versteckte input -Elemente aufzunehmen. Sie können dieses versteckte Element zu Ihrer Vorlagendatei hinzufügen:

<input id="my-post-id" type="hidden" value="<?php echo get_the_ID();?>">

Jetzt können Sie die ID des Posts in Ihrem AJAX -Aufruf abrufen:

var theID;
theID = jQuery("#my-post-id").val();

Auf diese Weise können Sie diesen Wert in Ihren Anruf einbeziehen:

function customFunction() {
    var theID;
    theID = jQuery("#my-post-id").val();
    jQuery.ajax({
        type: 'GET', 
        url: 'AJAX URL HERE', 
        data: { postid: theID }, 
        // The rest of the AJAX here
    }
};

Jetzt können Sie überprüfen, ob die ID in Ihrem Admin-AJAX eingestellt ist:

function get_blueprints_for_building () {
    // Stop execution if the function is called from out of the page
    if (!isset($_GET['postid'])) exit('Please set a post ID!');
    $id = $_GET['postid'];
    // Now we have the ID!
}

Es geht los.

Hinweis!

Ich würde auch empfehlen, dass Sie die REST API anstelle von Admin-AJAX verwenden. Es ist einfacher und schneller einzurichten. Schauen Sie sich meine Antwort an hier .

AKTUALISIEREN

Anstatt eine versteckte Eingabe zu erstellen, können Sie auch wp_localize_script verwenden, um Ihre ID an das Skript zu übergeben. Sie müssen jedoch ein Skript in der Warteschlange haben.

wp_localize_script( 
    'my-js', // The ID of your enqueued JS file
    'my_localized_js', // The prefix for object
    $my_localized_array // The array that contains your data
);

Jetzt können Sie die ID der aktuellen Seite in Ihrem Array festlegen:

$my_localized_array = array(
    'postID' => get_the_ID,
);

Anschließend können Sie folgendermaßen auf Ihre ID in der JS-Datei zugreifen:

var id = my_localized_js.postID;

Welche kann in der AJAX Aufruf später verwendet werden.

1
Jack Johansson