从搜索中排除自定义帖子类型的子级

时间:2018-06-27 21:23:24

标签: wordpress custom-wordpress-pages

我具有“位置”的自定义帖子类型。然后,我对该cpt的每个页面都有子页面。因此看起来像是“ www.example.com/location/location-name/child-page/”,每个子页面都使用“ location-product-services.php”发布模板。所以我想做的是从搜索结果中排除该cpt的子级。

我正在尝试通过检查元数据来查看它是否正在使用该模板。我似乎无法正常工作。任何帮助都会很棒。

这是我目前拥有的-

// Exclude local product and services pages from search result.
function location_subpages_exclude_search( $query ) {
    if ( is_search() && !is_admin()) {
        $query->set('meta_query',
            array(
                'key' => '_wp_page_template',
                'value' => 'location-product-services.php',
                'compare' => '!='
            )
        );
    }
}

add_action('pre_get_posts', 'location_subpages_exclude_search');

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,我几乎每次想修改搜索时都专门使用Relevanssi插件。但是要以编程方式进行搜索,我想这就是您想要的:

public int ShortWordCount(params string[] input) => input.Where(w => { var lc = w.Where(c => Char.IsLetter(c)).Count(); return lc <= 5 && lc > 0; }).Count();

使用函数get_terms搜索您的CPT,“搜索”是您的$ query(您可以考虑使用SQL通配符“%”包装搜索字符串),并且“父代” => 0仅返回顶级。 / p>

答案 1 :(得分:0)

我知道了。 首先,我得到了我的所有帖子类型的父页面,使用get_pages()可以全部抓住它们。

遍历每个父页面,并为该父页面的子代运行另一个get_pages()。

DatabaseReference messagesRef = mRootRef.child("messages")
   .child(current_user_id)
   .child(chat_user_id)
   .orderByChild("time");