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
Il n'y a pas de méthode get_pages()
dans le WP_Query
class
(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 .