Bogoプラグインで日本語のみの記事では言語切り替え表示を出さない方法

福田です。留学している際に僕のブログを紹介することがあるのですが、そういった際に日本語ばかりだとユーザビリティが悪いので、英語対応としてBogoというプラグインを導入しました。
しかし、これで多言語対応すると、一つも翻訳がないのに言語切り替えの部分が出たりして、ユーザーを混乱させる可能性があり、非常に都合が悪かったので、切り替え表示を非表示にする方法を自分で作りました。

Sponsored link

忙しい人向け

答えだけをお求めの方は「仕組み」の前までを見ていただければ全て解決します。

‹?php
/*
 * Plugin Name: Bogo Extend Switcher
 * Plugin URI: https://otya.me/network/bogo-no-translate-no-show/
 * Description: If N/A article in another language, then hide switcher screen.
 * Author: Fukuda Takuro
 * Version: 1.0
 * Author URI: https://otya.me/
 * License: GPL2+
 */
function is_alt_lang_available() {
    if(function_exists('bogo_language_switcher_links')) {
        $links = bogo_language_switcher_links();
        $total = count( $links );
        $av_lng = 0;

        foreach ( $links as $link ) {
            if ( !empty( $link['href'] ) ) {
                $av_lng++;
            }
        }
        if($total != $total - $av_lng) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
} ?›

これをコピー&ペーストしてテーマのfunctions.phpの末尾にに一行改行を入れた上で追記してください。そのあと、Bogoのスイッチャーを入れている該当箇所のファイルを

‹?php
echo do_shortcode( '[bogo]' );
?>

から

‹php
if(is_alt_lang_available()) {
    echo do_shortcode( '[bogo]' );
}
?›

に変更します。これだけでOKです。

仕組み

仕組みは単純。function_existの部分でBogoプラグインが入っているか、あとは該当関数が存在し使えるかなどをチェックし、万が一プラグインがなくなったとしても一応動作を続けられるようにしています。
その次に、$linksでBogoのユーザーが利用している言語一覧を取得。$totalにはその対応言語の数が代入されます。
$av_lng変数はAvailable Languageの略で、記事が存在する言語の数を代入する変数です。カウントアップのベースとして使うため、変数をここで初期化しています。

そしてforeachで多言語化された記事が存在するか($links[(言語コード)][“href”])をチェックしています。存在していると変数は空ではなく、リンクが入っているため、emptyでチェックしています。存在すると$av_lngに+1されます。
そして、最後まで$links変数を精査したあとは、対応言語から存在する言語の記事の数を引きます。

もし、どの言語も多言語対応されていない場合、$av_lngは0が代入されたままですので、当然$total-$av_lngは$totalと同じになり、このif文はfalseになります。一つでも対応していれば、$av_lngは1以上が代入され、同じ数にはならないので、このif文はtrueになるわけです。
これで多言語対応をしているかどうかがわかるようになるので、あとはテーマでif文で仕分ければ非多言語対応の記事では切り替え表示を出さなくすることができるようになるわけです。

どのように見つけたのか?

これらは全てGPLv2以降でオープンソースである、Bogoのソースコードを読み、変数や関数などをprint_rなどで出力結果を見ながら作っていきました。一部はそのまま使わせていただいたりなどもしました。速度はforeachを使っている以上微妙なところもありますが、ぜひともご利用いただけますと幸いです。

Sponsored link

Sponsored link

Leave a Reply