web-dev-qa-db-fra.com

Comment obtenir la liste des pages dans la recherche ajax

J'essaie de suivre ceci solution, c'est un peu efficace, mais j'ai besoin d'une liste de pages plutôt que de publications.

C'est le code avec lequel je travaille en utilisant les informations Codex de wordpress, mais je n'obtiens aucun résultat.

functions.php

add_action('wp_ajax_data_fetch' , 'data_fetch');
add_action('wp_ajax_nopriv_data_fetch','data_fetch');
function data_fetch(){

$the_query = new WP_Query( array( 'posts_per_page' => -1, 's' => esc_attr( 
$_POST['keyword'] ), 'post_type' => 'page' ) );
if( $the_query->get_pages() ) :
    while( $the_query->get_pages() ): $the_query->get_pages(); ?>

        <h2><a href="<?php echo esc_url( get_permalink() ); ?>"><?php the_title();?></a></h2>

    <?php endwhile;
    wp_reset_postdata();  
endif;

die();
}

Appel Ajax:

add_action( 'wp_footer', 'ajax_fetch' );
function ajax_fetch() {
?>

<script type="text/javascript">

function fetch(){
jQuery.ajax({
    url: '<?php echo admin_url('admin-ajax.php'); ?>',
    type: 'page',
    data: { action: 'data_fetch', keyword: jQuery('#keyword').val() },
    success: function(data) {
        jQuery('#datafetch').html( data );
    }
});
}
</script>

Formulaire HTML:

<input type="text" name="keyword" id="keyword" onkeyup="fetch()"></input>
<div id="datafetch">Search results will appear here</div>

Quelqu'un pourrait-il s'il vous plaît me diriger vers la bonne direction. Merci

1
pv619

Il n'y a pas de méthode get_pages() dans le WP_Queryclass (pour WordPress version 4.9.4).

Donc, dans data_fetch()function, remplacez ce qui suit:

if( $the_query->get_pages() ) :
    while( $the_query->get_pages() ): $the_query->get_pages(); ?>

..avec ça:

if( $the_query->have_posts() ) :
    while( $the_query->have_posts() ): $the_query->the_post(); ?>

Et dans la fetch() JS function, définissez la type sur POST, comme suit:

function fetch(){
jQuery.ajax({
    url: '<?php echo admin_url('admin-ajax.php'); ?>',
    type: 'POST',
    data: { action: 'data_fetch', keyword: jQuery('#keyword').val() },
    success: function(data) {
        jQuery('#datafetch').html( data );
    }
});
}

Astuce: Dans la data_fetch()function, je vous suggère d'utiliser wp_die() au lieu de die(). Vous devez également utiliser wp_reset_query() à la place de wp_reset_postdata() car vous passez un appel WP_Query personnalisé.

[EDIT] En réponse au commentaire suivant:

Puis-je demander comment je peux afficher les pages enfants uniquement d'une page parent?

Dans le formulaire HTML, vous pouvez ajouter une input masquée, qui stocke l'ID de la page parente. Et ajoutez ensuite la valeur à la data dans la demande AJAX. Ensuite, dans l'appel WP_Query (dans la data_fetch()function), vous pouvez utiliser post_parent pour définir l'ID de la page parente.

Voir exemple de code ici .

1
Sally CJ