实施自定义搜索解决方案

如果您正在寻找内容的搜索解决方案,您需要知道任何基于分类法或自定义字段进行过滤的插件都可以使用。
您可以将 WP_Query 与 query[‘s’] 参数一起使用,它将开箱即用,为该关键词提供相关帖子。
关键词需要与加载该页面时显示的当前语言相同。在代码中,返回的帖子将使用默认语言(ID、帖子标题、帖子内容等),但回显的内容将在稍后的钩子上翻译,因此它将以翻译后的语言显示在前端。

只有帖子标题和帖子内容可以在翻译语言中搜索,外部自定义字段(例如 ACF)则不能。根据您的设置,如果您可以在 the_content 挂钩内包含自定义字段内容,则自定义字段也可以搜索。
要使搜索在特定语言的特定帖子上起作用,必须在搜索之前将该帖子内容和标题翻译成相同的语言。如果自动翻译处于活动状态,则必须至少使用该特定语言访问一次帖子才能被 TP 编入索引。
但是,任何使用索引的插件都无法与我们的插件正常工作。

如果您希望使 TranslatePress 与无法开箱即用的自定义搜索功能兼容,那么您应该了解以下一些事项。

TranslatePress 将一个函数挂接到过滤器“pre_get_posts”上,以便调整翻译语言中搜索功能的查询。
如果设置了 query[‘s’] 并且当前查看的页面是翻译语言,则 TP 会执行搜索并返回默认语言的帖子 ID,其中该关键词在等效翻译帖子中找到。

您可以使用一个过滤器来应用此钩子,无论其状态如何:!is_admin() && $query->is_main_query() && $query->is_search()。
TranslatePress 代码如下所示:
if ( ( !is_admin() && $query->is_main_query() && $query->is_search() ) || apply_filters( 'trp_force_search', false ) )
因此,您可以挂接到“trp_force_search”以启用不同条件下的搜索。要始终启用搜索,请使用以下代码:
add_filter('trp_force_search', '__return_true');

以下是一个示例,说明如何通过 WP_Query 创建与不使用 WordPress 默认搜索系统的搜索功能的兼容性。在下面的代码中,该函数以翻译后的语言返回特定搜索关键字的帖子 ID。

add_filter( 'aws_search_results_products_ids', 'trp_aws_search_results_products_ids', 10, 2 );
function trp_aws_search_results_products_ids( $posts_ids, $s ){
global $TRP_LANGUAGE;
$trp = TRP_Translate_Press::get_trp_instance();
$trp_settings = $trp->get_component( 'settings' );
$settings = $trp_settings->get_settings();

if ( $TRP_LANGUAGE !== $settings[‘default-language’] ) {
$trp_search = $trp->get_component( ‘search’ );
$search_result_ids = $trp_search->get_post_ids_containing_search_term($s, null);

if (!empty ( $search_result_ids) ) {
return $search_result_ids;
}
}

return $posts_ids;
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容