0

コードを含むカスタム検索ページを作成しました

<?php 
function filter_where( $where = '' ) {
    $where .= " AND post_date >= '{$_GET['frmdate']}' AND post_date < '{$_GET['todate']}'";
    return $where;
}
add_filter( 'posts_where', 'filter_where');
$query = new WP_Query( array( 'post_type' => 'post' ) );
    while( $query->have_posts() ) : $query->the_post(); ?>

    <p><?php the_title(); the_date() ?></p>

<?php    endwhile; ?>
<?php remove_filter( 'posts_where', 'filter_where' ); wp_reset_query(); ?>

私の狙いは「2つの日付」の間の「キーワード」で投稿を検索することです

このようなURLを通過する私の検索変数

www.something.com?page_id=372&s12=lorem&s13=ipsum&frmdate=2012-03-01&todate=2012-06-12

2つの日付間の結果をフィルタリングする現在のコードでは、URLが次のようになっている場合に完全に機能しますwww.something.com?page_id=372&frmdate=2012-03-01&todate=2012-06-12

iam の追加&s=loremがキーワードと日付のフィルタリングの両方で機能しない場合。(&s=lorem) 一人でつけても

4

2 に答える 2

0

私のすべての要件で問題なく動作する以下のコードで私のコードを更新しました。別のよりスマートな方法があるかどうかはわかりません

<?php 
function filter_where( $where = '' ) {
    if(isset($_GET['frmdate']) && isset($_GET['todate'])){
        $where .= " AND post_date >= '{$_GET['frmdate']}' AND post_date < '{$_GET['todate']}'";
    }
    if(isset($_GET['s12'])){
        $where .= " AND post_content LIKE '%{$_GET['s12']}%' " ;
    }
    if(isset($_GET['s13'])){
        $where .= " AND post_title LIKE '%{$_GET['s13']}%' "    ;
    }
    //echo $where;exit;
    return $where;
}
add_filter( 'posts_where', 'filter_where');
$query = new WP_Query( array( 'post_type' => 'post' ) );

    while( $query->have_posts() ) : $query->the_post(); ?>

    <li>
        <h4><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
        <div class="monthDate"> <span class="date"><?php the_time('M d,Y H.i'); ?></span> <span class="month"><?php comments_number();?></span> </div>
        <p><?php content('100'); ?></p>
    </li>

<?php    endwhile; ?>
<?php remove_filter( 'posts_where', 'filter_where' ); wp_reset_query(); ?>
于 2012-06-05T06:28:51.643 に答える
0

カスタム ページを使用するのではなく、WP テンプレート階層で利用可能な検索テンプレートを変更するだけでよい場合があります。詳細については、この投稿を参照してください。

于 2012-06-01T13:54:29.377 に答える