只搜索一种自定义帖子类型,禁用“所有帖子”

时间:2016-01-18 作者:tim daniels

我有搜索表。php设置为搜索自定义帖子类型和类别。到目前为止还不错。然而,精明的用户可以编辑URL以删除“post\\u type=film”,并搜索所有页面和帖子。

我不想让它这样!我基本上希望搜索硬编码为只搜索特定的CPT,而不管URL slug中是什么。这可能吗?

搜索php包含以下内容:

<h1><?php echo sprintf( __( \'%s Search Results for \', \'site\' ), $wp_query->found_posts ); echo get_search_query(); ?></h1>

<?php get_template_part(\'loop\'); ?>

<?php get_template_part(\'pagination\'); ?>

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

我猜您的意思是覆盖前端主搜索查询的帖子类型。您可以尝试:

add_action( \'pre_get_posts\', function ( WP_Query $q )
{
    if ( 
            ! is_admin() 
         && $q->is_main_query() 
         && $q->is_search()
     )
        $q->set( \'post_type\', \'film\' );
} );
这样,您就不需要二次搜索查询或直接处理全局查询。

SO网友:yomisimie

您可以添加另一个loop.php 使用不同的名称:loop-film.php 并编辑其查询,以便仅检索film 岗位类型。之后在您的search.php 调用新循环:

<h1><?php echo sprintf( __( \'%s Search Results for \', \'site\' ), $wp_query->found_posts ); echo get_search_query(); ?></h1>

    <?php get_template_part(\'loop-film\'); ?>

    <?php get_template_part(\'pagination\'); ?>
此外,我认为您可能需要复制pagination.php 也可以编辑它。我不知道你的主题有什么文件,所以这只是基于你提供的。

SO网友:Jeroen

您可以通过编辑Search.php 在主题中创建文件。

此文件将包含以下内容:

<?php
global $query_string;

$query_args = explode("&", $query_string);
$search_query = array();

foreach($query_args as $key => $string) {
    $query_split = explode("=", $string);
    $search_query[$query_split[0]] = urldecode($query_split[1]);
} // foreach

$search = new WP_Query($search_query);
?>
如果添加$search\\u query[\'post\\u type\']=“film”;高于$搜索=新建。。。然后,搜索结果仅包含post\\u类型“film”中的项目。

SO网友:tim daniels

找到了适用于所有主题的解决方案。

function update_my_custom_type() {
global $wp_post_types;

if ( post_type_exists( \'post\' ) ) {

    // exclude from search results
    $wp_post_types[\'post\']->exclude_from_search = true;
}
}
从中找到它http://www.webtipblog.com/exclude-custom-post-type-search-wordpress/

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &