かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress 多言語化対応 Bogo で locale の投稿だけ取得したい

WordPress の多言語化対応プラグイン Bogo を使っている時に get_postsWP_Query を使って投稿を取得すると全ての言語の投稿が取得されるので、現在の locale (言語) に合うものだけ取得したいのメモ

'suppress_filters' => false パラメーターを使う

get_posts のデフォルトのパラメタでは 'suppress_filters' => true が指定されているためです。これを false に指定することで Bogo のフィルタが働き、特定の(デフォルトでは現在の)言語の投稿のみ取得できるようになります。
cf. Bogoプラグイン使用時、get_postsで投稿を取得すると全部の言語が対象になる | WordPress.org 日本語

<?php
$args = [
  'post_type' => $post_type,
  'posts_per_page' => -1, // 全件取得
  // …
  'suppress_filters' => false, // ← これを追加
];
get_posts( $args );

これで現在の言語の投稿だけが取得できるようになりました!

特定の言語で取得したい時は lang パラメーターを合わせて使う

<?php
$args = [
  'post_type' => $post_type,
  'posts_per_page' => -1, // 全件取得
  // …
  'suppress_filters' => false,
  'lang' => 'ja', // get_locale()
];
get_posts( $args );

📝 get_postsWP_Query のラッパー

get_posts は内部で WP_Query を呼び出している

get_posts()WP_Query クラスを利用して投稿を取得します。この関数で使えるパラメータについては、WP_Query ドキュメンテーションthe parameters section をごらんください。
cf. テンプレートタグ/get posts - WordPress Codex 日本語版

<?php
function get_posts( $args = null ) {
  // …
  $get_posts = new WP_Query();
  return $get_posts->query( $parsed_args );
}

cf. WordPress/post.php at 9c56cf2cf70093a0c5a75c95440c7c4c2351f775 · WordPress/WordPress · GitHub

所管

get_posts を使うとデフォルトでは言語に関わらず全ての投稿が取得されてどうやるんだ?ってなってたらフォーラムに作者の Takayki Miyoshi (@takayukister) さんが回答していて 助かりました。
Bogoプラグイン使用時、get_postsで投稿を取得すると全部の言語が対象になる | WordPress.org 日本語

WordPress 関連検索に出てきまくるので欲しい情報に辿り着く && 取捨選択がむずすぎる…


[参考]

ヴィンランド・サガ時代の言語関係ってどうなってるんだろう?イングランドゲール語???