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

我的目标是在“两个日期”之间搜索带有“关键字”的帖子

我的搜索变量像这样通过url

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

当我的网址看起来像这样时,使用我的当前代码过滤两个日期之间的结果可以正常工作www.something.com?page_id=372&frmdate=2012-03-01&todate=2012-06-12

当 iam 添加时&s=lorem关键字和日期过滤都不起作用。即使我单独添加它 (&s=lorem)

4

2 回答 2

0

您可能只想更改 WP 模板层次结构中可用的搜索模板,而不是使用自定义页面。请参阅这篇文章了解更多信息。

于 2012-06-01T13:54:29.377 回答
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 回答