私は多言語の Web ストアを持っており、WPML プラグインと Relevanssi のより良い検索プラグインを一緒に使用しています。
Relevanssi プラグインにはオプションがあります
結果を現在の言語に限定する: このオプションをオンにすると、Relevanssi は現在アクティブな言語でのみ結果を返します。それ以外の場合、結果にはすべての言語の投稿が含まれます。
問題は、このオプションをオンにした後、Relevanssi のより良い検索プラグインが現在アクティブな言語ではなく、デフォルトの言語 (私の場合は英語) でのみ結果を返すことです。このオプションをチェックしないと、Relevanssi のより良い検索プラグインが 3 つの言語すべてで結果を返します!
これは Relevanssi wpml フィルター コードです。現在アクティブな言語で結果を取得するために、このコードをどうすればよいか誰かが知っているのではないでしょうか?!
Relevanssi の作成者には、これを行う時間がありません :(
function relevanssi_wpml_filter($data) {
$use_filter = get_option('relevanssi_wpml_only_current');
if ('on' == $use_filter) {
//save current blog language
$lang = get_bloginfo('language');
$filtered_hits = array();
foreach ($data[0] as $hit) {
if (isset($hit->blog_id)) {
switch_to_blog($hit->blog_id);
}
global $sitepress;
if (function_exists('icl_object_id') && !function_exists('pll_is_translated_post_type')) {
if ($sitepress->is_translated_post_type($hit->post_type)) {
if ($hit->ID == icl_object_id($hit->ID, $hit->post_type, false, $sitepress->get_current_language())) $filtered_hits[] = $hit;
}
else {
$filtered_hits[] = $hit;
}
}
elseif (function_exists('icl_object_id') && function_exists('pll_is_translated_post_type')) {
if (pll_is_translated_post_type($hit->post_type)) {
global $polylang;
if ($polylang->model->get_post_language($hit->ID)->slug == ICL_LANGUAGE_CODE) {
$filtered_hits[] = $hit;
}
else if ($hit->ID == icl_object_id($hit->ID, $hit->post_type, false, ICL_LANGUAGE_CODE)) {
$filtered_hits[] = $hit;
}
}
else {
$filtered_hits[] = $hit;
}
}