web-dev-qa-db-ja.com

Ajax検索でページのリストを取得する方法

私は これ 解決策に従うことを試みています、それは一種の仕事ですが、私は投稿よりもむしろページのリストを必要とします。

これは私がワードプレスからのコーデックス情報を使って働いているコードですが、私は結果を得ていません。

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フォーム:

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

誰かが私を正しい方向に向けてください。ありがとう

1
pv619

WP_Queryclassにはget_pages()メソッドはありません(WordPressバージョン4.9.4の場合)。

そのため、data_fetch()functionで、以下を置き換えます。

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

..これとともに:

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

そしてfetch() JS functionでは、typePOSTに設定します。

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

ヒント:data_fetch()functionでは、wp_die()の代わりにdie()を使うことをお勧めします。カスタムのWP_Query呼び出しを行っているため、wp_reset_query()の代わりにwp_reset_postdata()も使用する必要があります。

[編集]次のコメントへの返答:

親ページのみの子ページを表示する方法を教えてください。

HTMLフォームでは、親ページのIDを格納する隠しinputを追加できます。そして、AJAXリクエストのdataに値を追加します。その後、WP_Query呼び出し(data_fetch()function)で、post_parentを使用して親ページのIDを設定できます。

サンプルコード ここ を参照してください。

1
Sally CJ