多言語化プラグイン Bogo を使用して get_posts で言語ごとの投稿を取得する

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

ググりまくった結果のメモ。

WordPressの多言語化プラグイン「Bogo」を使用してサイトを構築した際に
新着記事を5件取得したい場合、
例えば英語と日本語の投稿が混在しているとき、
日本語表示のときは日本語の投稿を新着5件、
英語表示のときは英語の投稿を新着5件取得したい、というときのためのメモ。

ウィジェットの「最近の投稿」は使わずに、
get_posts() テンプレートタグを使って投稿を取得していきます。

そのまま get_posts() テンプレートタグを使って新着5件取得しようとすると
日本語記事と英語記事が混在した状態で最新5件を引っ張ってきてしまうんですよね。

これはBogoの仕様として、

これは get_posts のデフォルトのパラメタでは ‘suppress_filters’ => true が指定されているためです。これを false に指定することで Bogo のフィルタが働き、特定の(デフォルトでは現在の)言語の投稿のみ取得できるようになります。

Bogoプラグイン使用時、get_postsで投稿を取得すると全部の言語が対象になる|wordPressフォーラム

ということらしいので。

つまり
get_posts の ‘suppress_filters’ を false に指定してやらなければならない。
でも、どうやって?

散々調べた結果、こちらのサイトのサンプルコードをお借りして指定することができました。

http://notnil-creative.com/blog/archives/1996

WordPressでページ送りが動かないのはどう考えてもquery_postsが悪い!【pre_get_posts、WordPressループまとめ】|notnil creation weblog

お借りしたコードはこちら。(一部改変済み)

<?php
$args = array(
    'posts_per_page' => 5,
    'offset' => 0,
    'cat' => 0,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'post_status' => 'publish',
    'suppress_filters' => false,
    'ignore_sticky_posts' => true,
    'no_found_rows' => true
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        ?>
        <h1><?php the_title(); ?></h1>
    <p><?php the_content(); ?></p>
      <?php
    }
}
wp_reset_postdata();
?>

これで投稿の新着5件(のタイトルと本文)を取得しつつ、
Bogoで英語表示になっているときは英語の記事新着5件
日本語表示になっているときは日本語の記事新着5件をそれぞれ取得してくれるようになりました。

テンプレートタグまだまだわからない…もっと勉強しないといけませんね。

このたび参考にさせていただいたサイト様は以下のサイト様です
WordPress サイトの多言語化に もう迷わない そう、Bogo ならね|Design Hack and Slash
Bogoプラグイン使用時、get_postsで投稿を取得すると全部の言語が対象になる|WordPressフォーラム
WordPressでページ送りが動かないのはどう考えてもquery_postsが悪い!【pre_get_posts、WordPressループまとめ】|notnil creation weblog

ありがとうございました。

多言語化プラグイン Bogo を使用して get_posts で言語ごとの投稿を取得する” への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。