web-dev-qa-db-fra.com

obtenir l'ID de publication personnalisé actuel par la méthode WP_Query

J'ai cette fonction dans mon 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();
}

alors cette fonction est accrochée pour pouvoir être appelée par AJAX comme suit:

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

Le problème que je rencontre est que chaque fois que je suis sur une page spécifique et que cette fonction est en cours d'exécution, j'ai besoin de l'ID de la page en cours, mais la fonction renvoie toutes les pages correspondant au post_type => portfolio et pas seulement à celle que je suis actuellement. à.

La question est que comment puis-je récupérer ce seul identifiant en utilisant le WP_Query?

MISE À JOUR - Qu'est-ce que j'essaie de réaliser ici?

Je suis sur une page, appelons-le portfolio-1 à titre d'exemple.

Dès que la page portfolio-1 est chargée, j'exécute un AJAX, qui appelle la fonction php mentionnée ci-dessus.

Je voudrais obtenir l'ID de cette page actuelle (le portfolio-1) car sur une autre table de la base de données, il y a des éléments liés à cette page, connectés par l'ID de la page. Jusqu'à présent, cette requête de base de données ne figure pas dans la fonction, car j'essayais simplement d'obtenir l'id de la page en cours. Si l'identifiant est fourni, je vais simplement appeler une autre fonction avec cet identifiant comme paramètre, comme:

get_the_other_stuff($currentPageId)

Mais ce n'est pas ce que la question est à propos en ce moment. :)

1
Richard Zilahi

Étant donné que le AJAX peut être appelé de n'importe où, même par un moteur de recherche, vous devez passer l'ID manuellement. Pour ce faire, vous devez inclure l'ID de votre page actuelle quelque part dans votre modèle.

Il est courant d'inclure des informations supplémentaires dans les éléments input cachés. Vous pouvez ajouter cet élément caché à votre fichier de modèle:

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

Vous pouvez maintenant obtenir l'ID de l'article dans votre appel AJAX:

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

De cette façon, vous pouvez inclure cette valeur dans votre appel:

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
    }
};

Maintenant, vous pouvez vérifier si l’ID est défini dans votre Admin-AJAX:

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!
}

Voilà.

Remarque!

Je vous recommanderais également d'utiliser l'API REST à la place d'Admin-AJAX. C'est plus facile et plus rapide à mettre en place. Regardez ma réponse ici .

METTRE À JOUR

Au lieu de créer une entrée masquée, vous pouvez également utiliser wp_localize_script pour transmettre votre identifiant au script. Vous devez cependant avoir un script en file d'attente.

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
);

Maintenant, vous pouvez définir l'ID de la page en cours dans votre tableau:

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

Après cela, vous pouvez accéder à votre ID dans le fichier JS en utilisant ceci:

var id = my_localized_js.postID;

Qui peut être utilisé dans l'appel AJAX ultérieurement.

1
Jack Johansson