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
を使用して投稿を作成し分類することに成功したため、この全体的な戦略が機能することはわかっています。したがって、この演習は教育目的および将来の参照用です。
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");'
通常、次のようにコマンドラインでスクリプトに配列を渡します。
# Our array is named "foo"
php yourscript.php foo[]=bar&foo[]=baz&foo[some_key]=some_value