wake-up-neo.net

So erhalten Sie eine Liste der Seiten in der Ajax-Suche

Ich versuche, diese Lösung zu befolgen, es funktioniert, aber ich brauche eine Liste von Seiten und keine Beiträge.

Dies ist der Code, mit dem ich mit Codex-Informationen von WordPress arbeite, aber ich erhalte keine Ergebnisse.

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

Ajax Call:

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>

HTML-Formular:

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

Könnte mich bitte jemand in die richtige Richtung weisen. Vielen Dank

1
pv619

Es gibt keine get_pages()-Methode im WP_Queryclass (für WordPress Version 4.9.4).

Ersetzen Sie daher in der data_fetch()function Folgendes:

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

..mit diesem:

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

Setzen Sie in der fetch() JS function die type wie folgt auf POST:

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

Hinweis: In der data_fetch()function empfehle ich Ihnen, wp_die() anstelle von die() zu verwenden. Sie sollten auch wp_reset_query() anstelle von wp_reset_postdata() verwenden, da Sie einen benutzerdefinierten WP_Query-Aufruf tätigen.

[BEARBEITEN] Als Antwort auf folgenden Kommentar:

Kann ich bitte fragen, wie ich nur untergeordnete Seiten einer übergeordneten Seite anzeigen kann?

Im HTML-Formular können Sie eine versteckte input hinzufügen, in der die ID der übergeordneten Seite gespeichert wird. Fügen Sie dann den Wert der data in der AJAX -Anforderung hinzu. Anschließend können Sie im Aufruf WP_Query (in der data_fetch()function) post_parent verwenden, um die ID der übergeordneten Seite festzulegen.

Siehe Beispielcode hier .

1
Sally CJ