4

ページで 2 つのクエリを実行しようとしています。1 つ目はカスタム ユーザー検索の結果を表示し、2 つ目はクエリにハード コードされたいくつかのカスタム パラメーターを使用して最近のレコードを表示することになっています。

私が抱えている問題は、カスタム検索を実行すると、両方のクエリが影響を受け、結果が両方の場所で更新されることです。

これらの wp_reset_postdata(); を配置しようとしました。wp_reset_query(); いたるところにありますが、すべて利用できません。

誰にもアイデアはありますか?

これは私の最初のクエリです

$args = array('post_type' => 'vacancy', 'post_status' => 'publish' ) );
add_filter( 'posts_where', 'posts_where_title', 10, 2 );
function posts_where_title( $where, &$wp_query ) {
global $wpdb;
$where .= ' AND (' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $_POST['post_title'] ) ) . '%\'';
$where .= ' OR ' . $wpdb->posts . '.post_content LIKE \'%' . esc_sql( like_escape( $_POST['post_title'] ) ) . '%\')';
return $where;
}
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
//display results ?>
<?php $i++;  endwhile;  endif;  
wp_reset_postdata();
wp_reset_query();?>

これは私の2番目のクエリです...

$args = array( 'post_type' => 'vacancy', 'posts_per_page' => 10 );
query_posts( "_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC" );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
//display results
endwhile;
wp_reset_postdata();
wp_reset_query();
4

1 に答える 1

5

あなたの問題はこの行です:

query_posts( "_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC" );

query_posts はメイン ループに影響し、特定のページ リクエストで実行される他のほぼすべてのループに影響します。WP_Query や get_posts を介して使用することをお勧めする状況はほとんどありません。これは、Wordpress が表示内容に関する情報を入力するために使用するグローバル変数の多くに影響を与えるためです。

個人的には、通常、WP_Query でクエリ メソッドを使用することはありませんが、このシナリオでは役立つかもしれません。2 番目のクエリを次のように変更してみてください。

$args = array( 'post_type' => 'vacancy', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
$loop->query( "_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC" );
while ( $loop->have_posts() ) : $loop->the_post();
    //display results
endwhile;
wp_reset_postdata();
wp_reset_query();

これにより、すべてにグローバルに影響を与えるのではなく、クエリが WP_Query の単一のインスタンスにローカライズされます。未テストですが、これが役立つかどうか教えてください。

もう一つ:

add_filter( 'posts_where', 'posts_where_title', 10, 2 );
function posts_where_title( $where, &$wp_query ) {
    global $wpdb;
    $where .= ' AND (' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $_POST['post_title'] ) ) . '%\'';
    $where .= ' OR ' . $wpdb->posts . '.post_content LIKE \'%' . esc_sql( like_escape( $_POST['post_title'] ) ) . '%\')';
    return $where;
}

このフィルターは、add_filter の呼び出し後に設定したすべてのクエリで実行されることに注意してください。フィルターを実行する必要がなくなった時点で、フィルターを削除することを検討してください。

remove_filter( 'posts_where', 'posts_where_title');
于 2012-12-31T18:25:03.837 に答える