web-dev-qa-db-ja.com

AjaxによるWordPress検索結果、get_post_type()が機能しない

私はAjaxを使って検索結果をロードしようとしています。結果は正しく表示されますが、検索語を結果の前に表示させるためにget_search_query()を機能させることはできません。 Javascriptでこれを実行できることはわかっていますが、WordPressの機能が機能していない理由について非常に興味があります。私は$_GET['s']get_query_var('s')を使っても試しましたが、どちらもうまくいきません。

下記の私のコードを見てください。

Functions.php

<?php add_action( 'wp_ajax_search_results', 'load_search_results' );
add_action( 'wp_ajax_nopriv_search_results', 'load_search_results' );

function load_search_results() {
    $query = $_POST['query'];
    $args = array(
        'post_status' => array( 'publish', 'inherit' ),
        's' => $query
    );
    $search = new WP_Query( $args );

    if ( $search->have_posts() ) :         
    ?>
        <h1><?php printf( __( 'Results for: %s', 'theme' ), get_search_query() ); ?></h1>
        <?php /* Start the Loop */ ?>
        <?php  while( $search->have_posts() ): $search->the_post();?>
            <?php get_template_part( 'content', get_post_type() ); ?>
        <?php endwhile;
    else :?>
        <p><?php _e( 'No results', 'theme' ); ?></p>
    <?php endif;    
    die();      
}?>


JSコード

    $(document).on('submit', '.search-form', function( event ) {
        event.preventDefault();
        var $input = $(this).find('input[name="s"]');
        var $sQuery = $input.val();
        $('#results').html('');
        $.ajax({
            url: ajaxPosts.ajaxurl,
            type: 'post',
            data: {
                action: 'search_results',
                query: $sQuery                  
            },
            success: function( html ) {
                $('#results').append( html );
            }
        });

    }); 
1
Bob

$_GET['s']は2つの理由で機能しません。最初にGETリクエストではなくPOSTリクエストを行い、次にリクエスト内にsという名前の変数がありません。

wp-admin/admin-ajax.php でAJAXリクエストを実行すると、そのリクエストに登録されているコード(関数)のみが実行されます。また、WordPress Core用のWordPress管理APIとAjaxハンドラをロードします。そのため、クエリ変数、テンプレートなどは初期化されず、get_search_query()が機能しません。 AJAX要求のフローは通常のものと異なり、最低限のものだけがロードされています。フローの詳細については wp-admin/admin-ajax.php をご覧ください。

0
Laxmana