web-dev-qa-db-ja.com

WP-CLIコマンドの引数として配列を渡すにはどうすればいいですか?

WP-CLIを使用して、カスタム分類用語を割り当てた新しい投稿をいくつか作成します。課題は、wp_insert_postのtax_input引数が配列のみを受け入れることです。これはコマンドラインで指定する必要があります。 コーデックス によると、必要な形式は次のとおりです。

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

しかし、私はこのようなものが必要です:

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

だから私の考えは、シリアル化された配列でWP-CLIコマンドを実行するPHPスクリプトを書くことでした:

//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');

ああ、これはうまくいきません。それは大丈夫新しいポストを作成しますが、それは私が欲しい「コース」分類カテゴリを割り当てません。任意の助けがいただければ幸いです。

wp_insert_postsを使用して投稿を作成し分類することに成功したため、この全体的な戦略が機能することはわかっています。したがって、この演習は教育目的および将来の参照用です。

3
JP Lew

WP-CLIは引数を直接wp_insert_postsに渡すので、これはおそらく不可能です。私はwp evalでこれを自動化しています。例えば:

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

--porcelainを使用して投稿を作成すると、投稿IDを取得できます。

wp post create ... --porcelain

あるいは役職のある通常のクエリでは:

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

通常、次のようにコマンドラインでスクリプトに配列を渡します。

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