web-dev-qa-db-fra.com

Comment passer un tableau en tant qu'argument à une commande WP-CLI?

Je souhaite utiliser WP-CLI pour créer de nouveaux articles auxquels des termes de taxonomie personnalisés ont été attribués. Le problème est que l'argument tax_input de wp_insert_post n'accepte que les tableaux, ce que je devrais spécifier sur la ligne de commande. Selon le codex , voici le format requis:

$post = array(
    'tax_input' => [ array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ) ] // support for custom taxonomies
}

Mais j'ai besoin de quelque chose comme ça:

wp post create --post_type=lecture --post_title='Test Post #1' --tax-input=[BIG FAT ARRAY]

Donc, mon idée était d'écrire un script PHP qui exécute la commande WP-CLI avec le tableau sérialisé:

//DEFINE VARIABLES
$post_title = "Test Post #1";
$tax_items = array( 9,11,17 );
$tax_input = array( 'course' => $tax_items );

//SERIALIZE THIS ARRAY
$tax_escaped = escapeshellarg(serialize($tax_input));

//WRITE THE COMMAND
$exec_string = 'wp post create --post_type=lecture --post_status=publish --post_title="%1$s" --tax_input=%2$s --porcelain';
$exec_command = sprintf($exec_string, $post_title, $tax_escaped );
$post_id = Shell_exec($exec_command);

//THE OUTPUT
//wp post create --post_type=lecture --post_status=publish --post_title="Test Post #1" --tax_input='a:1:{s:5:"class";a:3:{i:0;i:9;i:1;i:11;i:2;i:17;}}' --porcelain

//RELATE THE NEW POST TO THE TAXONOMY TERMS
wp_set_object_terms( $post_id, $tax_items,'course');

Hélas, ça ne marche pas. Cela crée bien le nouveau message, mais il ne permet pas d’attribuer les catégories de taxonomie du "cours" que je veux. Toute aide serait appréciée.

Je sais que cette stratégie globale fonctionne, car j’ai réussi à créer et à taxonomiser mes articles en utilisant wp_insert_posts. Donc, cet exercice est à des fins éducatives et de référence future.

3
JP Lew

Ceci est probablement impossible puisque WP-CLI passe les arguments directement à wp_insert_posts. J'automatise cela avec wp eval. Par exemple:

wp eval 'wp_set_object_terms(12 , array(1, 2, 3), "course");'

L'identifiant de publication peut être obtenu lorsque vous créez la publication avec --porcelain:

wp post create ... --porcelain

Ou par requête normale avec titre de post:

wp eval 'wp_set_object_terms(get_page_by_title("Test Post #1", OBJECT, "lecture")->ID, array(1, 2, 3), "course");'
2
tungd

Normalement, vous transmettriez un tableau à un script sur la ligne de commande en utilisant la commande suivante.

# Our array is named "foo"
php yourscript.php foo[]=bar&foo[]=baz&foo[some_key]=some_value
0
kaiser