1

私は多言語の 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;
            }
        }
4

1 に答える 1