自定义帖子类型不显示在搜索结果中

时间:2019-06-18 作者:user170197

我正在开发一个插件,其中我添加了一个自定义帖子类型,并在插件激活后基于wp\\u insert\\u post函数插入其帖子。问题是,无论我做什么,自定义帖子类型都不能出现在搜索中。

我尝试在通过pre\\u get\\u posts挂钩搜索的帖子类型中包含新的自定义帖子类型。我甚至用Relevansi插件检查了它,确保它们被索引并打印了要索引的自定义帖子类型的数组,并且它已经显示在数组中。我试图通过管理界面手动插入它。我甚至尝试过这个问题中提到的解决方案,但上述任何一项都不起作用:

https://stackoverflow.com/questions/36787961/wordpress-custom-post-type-not-showing-in-search-results

以下是我关于注册自定义帖子类型的代码:

    $args = array(
    \'labels\'                => $labels,
    \'supports\'              => array( \'title\', \'editor\' ),
    \'hierarchical\'          => false,
    \'public\'                => true,
    \'show_ui\'               => false,
    \'show_in_menu\'          => false,
    \'menu_position\'         => 5,
    \'show_in_admin_bar\'     => false,
    \'show_in_nav_menus\'     => false,
    \'can_export\'            => true,
    \'has_archive\'           => true,
    \'exclude_from_search\'   => false,
    \'publicly_queryable\'    => true,
    \'capability_type\'       => \'post\',
);
register_post_type( \'taxarchive\', $args );
这是插入帖子的代码:

$taxonomies = $wpdb->get_results("SELECT term_id, name FROM $wpdb->terms");
  $taxonomies_array = array();
  wp_defer_term_counting(true);
foreach ($taxonomies as $taxonomy) {
    $term = get_term($taxonomy->term_id);
    $taxonomy = get_taxonomy($term->taxonomy);
    if(isset($term->taxonomy) && $taxonomy->publicly_queryable) {
    $taxonomies_array[$taxonomy->name] = $term->taxonomy;
    $term_post = array(
      \'post_title\'    => $term->name,
      \'post_content\'  => $term->name,
      \'post_status\'   => \'publish\',
      \'post_type\'     => \'taxarchive\'
    );
    if(post_exists($term->name) == 0) {
    wp_insert_post($term_post);
  }

    }
  }

  wp_defer_term_counting(false);
这是将taxarchive帖子类型添加到pre\\u get\\u posts挂钩的代码:

    function add_post_type_to_search( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

  $args = array(
     \'exclude_from_search\'   => false,
  );

  $post_types = get_post_types( $args, \'names\', \'and\' );
  print_r($post_types);


    $query->set(
        \'post_type\', array_values($post_types)
    );
//    print_r($query);

}
add_filter( \'pre_get_posts\', \'add_post_type_to_search\' );
当我搜索任何相关关键字时,我从未在搜索结果中获得任何taxarchive帖子类型的帖子。如何在结果中为它们编制索引?

1 个回复
SO网友:user170197

最后我找到了这个问题的原因。这仅仅是因为Polylang插件。由于插件在所有帖子中添加了与网站语言相关的分类法,因此它在搜索查询中添加了一个LEFT-JOIN语句,并带有一个条件WHERE 1=1 AND post has that taxonomy id. 因为我没有在wp_insert_post 函数中,与我创建的帖子类型相关的所有帖子都不能满足Polylang添加的查询中的条件。一旦我停用它,一切正常。

相关推荐

Search function not working

我正在为我的woocommerce商店使用SSHOP主题。当我从主页搜索任何内容时,搜索url工作正常,下面的搜索permalink显示。https://techcart.pk/?s=abc但当我从产品页面或分类页面搜索时,搜索结果并没有找到任何内容,下面的permalink显示。https://techcart.pk/product/8mm-led-10pcs/?s=abc我想重写上面的永久链接,如下所示https://techcart.pk/?s=abc请帮忙