有没有人能提供这项功能的帮助?

时间:2011-05-31 作者:Dan

我正在尝试为我的函数编写一个函数。php文件。我必须做到以下几点:;

循环搜索结果,检查模板是否“着陆”。php将其添加到ad数组使用数组中收集的id将这些页面从搜索结果中排除

function filter_where($where = \'\') {
global $wpdb; // do I need this?
if ( is_search() ) {
    if(is_page_template(\'landing.php\')) { echo \'yes!\'; } // ids collected here
    $exclude = array(286);  

    for($x=0;$x<count($exclude);$x++){
      $where .= " AND ID != ".$exclude[$x];
    }
}
return $where;
}
add_filter(\'posts_where\', \'filter_where\');

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

您正在使用的筛选器posts_where 影响SQL查询的创建,因此根据定义,它是在查询运行之前执行的,您可以得到任何搜索结果。

所以此时您不能循环遍历结果,您可以做的是从其他地方检索或硬编码不需要的项目列表,并使用它们修改查询。

Update

好的,这比用注释来解决问题更快。这可能并不完美,但应该是您想要什么的良好起点:

add_action(\'pre_get_posts\',\'exclude_pages\');

function exclude_pages( $query ) {

    if( !empty( $query->query_vars[\'s\'] ) ) {

        $pages = get_posts(array(
                            \'post_type\' => \'page\',
                            \'meta_query\' => array( array(
                                \'key\' => \'_wp_page_template\',
                                \'value\' => \'landing.php\',
                            )),
                           ));

        $exclude = array();

        foreach( $pages as $page )
            $exclude[] = $page->ID;

        $query->set(\'post__not_in\', $exclude);
    }
}

SO网友:Paulo Coghi

如果需要从搜索结果中删除某些特定页面或帖子,可以使用“WP Hide Post“”插件。

根据其描述:“使您能够通过在博客的某些部分隐藏帖子/页面,而在其他部分仍然可见,来控制博客上项目的可见性。”

特别是,此插件允许您控制post 在各种不同的视图中:

首页(主页,取决于您的主题,这可能不相关)

  • 类别页(列出属于某个类别的帖子)
  • 标记页(列出带有给定标记的帖子)
  • 作者页(列出属于作者的帖子)
  • 存档页(列出属于时间段的帖子:月、周、日等)
  • The Search Results
  • Feeds
    • 帖子将从您选择的位置消失。在其他任何地方,它们都会以常规帖子的形式出现。特别是,帖子的永久链接仍然有效,如果您生成了一个站点地图,比如Google XML站点地图,那么帖子也会出现在那里。这意味着你的帖子内容将被搜索引擎索引和搜索。

      对于WordPresspage, 此插件还允许您通过两个选项控制可见性:

      仅在首页(主页)上隐藏页面hiding the page in the search results 是可选的)

    结束