web-dev-qa-db-ja.com

配列内の変数が機能しない

クエリ内の引数の1つに対して変数を機能させることに問題があります。表示されるカテゴリを決定するための用語として、カスタムの投稿タイプとカテゴリ名を使用しています。

値を用語にハードコードするとうまくいきますが、変数を使うとうまくいかないようです。

このコードは動作します:

$args = array(
    'post_type' => 'sparknz',
    'tax_query' => array(
        array(
            'taxonomy'  => 'sparknz_gardens',
            'field'     => 'name',
            'terms'     => array ( 'The A Team', 'The B Team', 'The C Team' ),
        )
    )
);  

しかし、そうではありません(用語の点では可変です):

$my_term_names = "'The A Team','The B Team','The C Team'";

$args = array(
    'post_type' => 'sparknz',
    'tax_query' => array(
        array(
            'taxonomy'  => 'sparknz_gardens',
            'field'     => 'name',
            'terms'     => array( $my_term_names ),
        )
    )
);

変数にするには用語が必要です。何か案は?

文字列を変数として使用している理由に関する最新情報。私はarray_intersectを使って2つの配列の類似性を見つけます。

$my_user_array  = array( "c" => $user_array );
$my_cat_array   = array( "d" => $category_array );
$myresult       = array_intersect( $my_user_array, $my_cat_array );
$my_term_names  = implode( ",", $myresult );

echo $$my_term_names;

これを行う別の方法があるかどうかわからないですか?

1
aido14

次のコードは、1つの連続した文字列として表されています。

$my_term_names = "'The A Team','The B Team','The C Team'";

これらの用語を配列にします。

$my_term_names = array( 'The A Team', 'The B Team', 'The C Team' );

今、あなたはあなたのタームクエリからarray()を削除する必要があります。

$args = array(
    'post_type' => 'sparknz',
    'tax_query' => array(
        array(
            'taxonomy' => 'sparknz_gardens',    // taxonomy name
            'field'    => 'name',               // term_id, slug or name
            'terms'    => $my_term_names,       // Terms array (defined above)
        )
    )
);

編集します。 2016/10/19

array_intersect();を使って複数の配列間の類似性を見つけたいのですが、類似性が見つかったらすべてを文字列形式に戻すのをやめる必要があります。 array_intersect();は複数の配列を取り、類似性を見つけ、指定された複数の配列間の類似した値を含む新しい配列を返します。

例1 array_intersect()の例

$array1 = array( "a" => "green", "red", "blue" );
$array2 = array( "b" => "green", "yellow", "red" );
$result = array_intersect( $array1, $array2 );
print_r( $result );

上記の例では、次のように出力されます。

Array
(
    [a] => green
    [0] => red
)

tax_queryから複数の用語を検索する予定の場合、tax_queryterms引数は 配列形式 である必要があります。文字列フォーマットではありません。

あなたの状況に合わせた最新の例です。わかりやすいように、単純な変数名を使用しました。

$terms_array_1 = array( 'The B Team', 'The D Team', 'The A Team' );
$terms_array_2 = array( 'The A Team', 'The B Team', 'The C Team' );

$similar_terms = array_intersect( $terms_array_1, $terms_array_2 );

print_r( $similar_terms );

$args = array(
    'post_type' => 'sparknz',
    'tax_query' => array(
        array(
            'taxonomy' => 'sparknz_gardens',    // taxonomy name
            'field'    => 'name',               // term_id, slug or name
            'terms'    => $similar_terms,       // Term Names array (similarities between array1 and array2)
        )
    )
);
2
Michael Ecklund

PHPはこれらの配列を異なる方法で解釈します。最初の例では、WP_Queryに投稿を依頼しています。
by 3 term slugsそして2番目の例では、配列に1文字列の値を代入しています。 2つの配列を印刷すると、次のようになります。

あなたの例1:

'terms' => array(
    [0] => 'The A Team',
    [1] => 'The B Team',
    [2] => 'The C Team'
)

あなたの例2:

'terms' => array(
    [0] => '\'The A Team','The B Team','The C Team\''
)

PHPは、それが単一の文字列を代入していると考えています、たとえ文字列自体にカンマがあってもそれは絶対的な文字列です。あなたがする必要があるのは変数自体を配列にすることです。

$my_term_names = array(
    'The A Team',
    'The B Team',
    'The C Team'
)

'terms' => $my_term_names
2
Howdy_McGee