Wordpress高级搜索

时间:2012-06-01 13:44:19

标签: php wordpress

我创建了一个包含代码的自定义搜索页面

<?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

时,工作正常

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

2 个答案:

答案 0 :(得分:0)

您可能只想更改WP模板层次结构中可用的搜索模板,而不是使用自定义页面。有关详细信息,请参阅this post

答案 1 :(得分: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(); ?>