このようにループ内の特定のタグからの投稿のみを表示するMUプラグインを作成しました。
function custom_tags( $query ) {
$query->set( 'tag', array( 'custom', 'general' ) );
}
add_action( 'pre_get_posts', 'custom_tags' );
配列を削除して1つのタグだけをチェックしても問題はありませんが、上記のように複数のタグで動作させるにはどうすればよいですか。
私が得ているエラーは次のとおりです。
Warning: strpos() expects parameter 1 to be string, array given in /srv/users/s/wp-includes/query.php on line 1966
Warning: preg_split() expects parameter 2 to be string, array given in /srv/users/s/wp-includes/query.php on line 1967
更新されたコード
$current = substr($_SERVER[HTTP_Host], 0, -4);
function custom_tags( $query ) {
$query->set( 'tag', 'general,{$current}' );
}
add_action( 'pre_get_posts', 'custom_tags' );
Milo(そしてあなたのエラー)が指摘するように:あなたは文字列が期待されるところに配列を渡している。 WP_Queryタグパラメータに従って
特定のタグに関連した投稿を表示します。
- tag(string) - タグスラッグを使用します。
これを回避するには、カンマ区切りの文字列を渡すだけです。
function custom_tags( $query ) {
$query->set( 'tag', 'custom,general' );
}
add_action( 'pre_get_posts', 'custom_tags' );
たとえば、適切な tax_query
を作成します。
'tax_query' => array(
array(
'taxonomy' => 'people',
'field' => 'slug',
'terms' => 'bob',
),
),
しかし、あなたのコード "update code"は他の理由でも失敗するでしょう。
$current
は範囲外です。必要な最低限の変更は次のとおりです。
function custom_tags( $query ) {
$current = substr($_SERVER[HTTP_Host], 0, -4);
$query->set( 'tag', "general,{$current}" );
}
add_action( 'pre_get_posts', 'custom_tags' );
しかし、述べたように、私は適切なtax_query
を作成したいと思います
function custom_tags( $query ) {
$current = substr($_SERVER[HTTP_Host], 0, -4);
$tax = array(
array(
'taxonomy' => 'tag',
'field' => 'slug',
'terms' => $current,
'operator' => 'IN' // This is default
),
);
$query->set( 'tag', "general,{$current}" );
}
add_action( 'pre_get_posts', 'custom_tags' );
演算子を変更して異なる動作をさせることができます。
オペレーター (ひも) - テストするオペレータ可能な値は、 'IN'、 'NOT IN'、 'AND'、 'EXISTS'、および 'NOT EXISTS'です。デフォルト値は 'IN'です。
そして、あなたのコードはサイト上のすべてのクエリに対して実行されます。それは多くのことを変更し、そして確かに物事を壊すでしょう。必要な場所だけに制限する必要があります。私はこれがいつどこでいつ実行されることになっているのか正確にはわかりませんが、これはスタートであるべきです:
function custom_tags( $query ) {
if (is_admin()
|| $query->is_main_query()
) {
return;
}
$current = substr($_SERVER[HTTP_Host], 0, -4);
$tax = array(
array(
'taxonomy' => 'tag',
'field' => 'slug',
'terms' => $current,
'operator' => 'IN' // This is default
),
);
$query->set( 'tag', "general,{$current}" );
}
add_action( 'pre_get_posts', 'custom_tags' );