WordPress の多言語化対応プラグイン Bogo を使っている時に get_posts
や WP_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_posts
は WP_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 関連検索に出てきまくるので欲しい情報に辿り着く && 取捨選択がむずすぎる…
[参考]
- Bogo – WordPress プラグイン | WordPress.org 日本語
- Bogoプラグイン使用時、get_postsで投稿を取得すると全部の言語が対象になる | WordPress.org 日本語
- get_posts() | Function | WordPress Developer Resources
- WP_Query | Class | WordPress Developer Resources