web-dev-qa-db-fra.com

La variable dans le tableau ne fonctionne pas

J'ai un problème à faire en sorte qu'une variable fonctionne pour l'un de mes arguments dans une requête. J'utilise un type d'article personnalisé et un nom de catégorie en tant que termes pour déterminer les catégories affichées.

Lorsque je codifie les valeurs dans les termes, cela fonctionne bien, mais lorsque j'utilise une variable, cela ne semble pas fonctionner.

Ce code fonctionne:

$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' ),
        )
    )
);  

Mais ce n'est pas (remarque variable en termes):

$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 ),
        )
    )
);

J'ai besoin que les termes soient une variable. Des idées?

Juste une mise à jour pour expliquer pourquoi j'utilise une chaîne en tant que variable. J'utilise array_intersect pour identifier les similitudes dans deux tableaux:

$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;

Vous ne savez pas s'il existe un autre moyen de procéder?

1
aido14

Le code suivant est représenté par une chaîne continue:

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

Vous voulez que ces termes soient un tableau:

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

Vous devez maintenant supprimer la array() de votre requête de termes.

$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)
        )
    )
);

Modifier. 10/19/2016

Je sais que vous voulez trouver les similitudes entre plusieurs tableaux à l'aide de array_intersect();. Cependant, vous devez cesser d'essayer de tout ramener au format chaîne une fois que vous avez localisé vos similitudes. array_intersect(); prend plusieurs tableaux, trouve les similitudes et retourne un nouveau tableau contenant les valeurs similaires entre les multiples tableaux spécifiés.

Exemple # 1 array_intersect() exemple

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

L'exemple ci-dessus affichera:

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

Si vous envisagez de récupérer plusieurs termes à partir de votre tax_query, l'argument terms du tax_query doit être au format array form . Pas de format de chaîne.

Voici un exemple mis à jour pour votre situation. J'ai utilisé des noms de variables simples pour faire passer le message:

$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 interprète ces tableaux différemment. Dans le premier exemple, vous demandez à WP_Query d’obtenir des publications.
by 3 term slug et dans le deuxième exemple, vous attribuez au tableau une valeur de 1 chaîne. Si nous devions imprimer les deux tableaux, cela ressemblerait à ceci:

Votre exemple 1:

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

Votre exemple 2:

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

PHP pense que vous lui attribuez une seule chaîne, même s'il y a des virgules dans la chaîne elle-même, c'est une chaîne absolue. Ce que vous devrez faire, c'est faire de la variable elle-même un tableau.

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

'terms' => $my_term_names
2
Howdy_McGee