Intereting Posts
Почему этот код не добавляет таблицу в мою базу данных? Как добавить другую ссылку на каждый пост delete_user_meta: как удалить все метаданные данного пользователя (witout SQL) Должен ли я ставить в очередь стили / сценарии один раз, а затем выгружать их из очереди? Меню не отображает категорию продукта woocommerce Условный css для пользовательского типа сообщения Зачем проверять, нет ли функции в functions.php? Можете ли вы иметь более одного nonce на странице? Фиксация разбивки на страницы с помощью таксономического архива Пользовательская функция для шаблона архива портфеля с условным тегом Могу ли я добавить / заменить изображение WordPress в Личном кабинете Разделить базу данных на большом сайте? Разрешить URL-адрес сайта в текстовом поле, используя wp_kses / wp_filter_nohtml_kses? Что не так с назначением значений классу WP_List_Table? Значение по умолчанию для элемента управления настройками для пользовательских настроек, отображаемое в настройке, но не во внешнем интерфейсе

Как передать массив в качестве аргумента команде WP-CLI?

Я хочу использовать WP-CLI для создания новых сообщений с назначенными пользовательскими терминами таксономии. Проблема состоит в том, tax_input аргумент tax_input 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] 

Поэтому моя идея заключалась в том, чтобы написать скрипт PHP, который выполняет команду WP-CLI с сериализацией массива:

 //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 . Таким образом, это упражнение предназначено для образовательных целей и в будущем.

Solutions Collecting From Web of "Как передать массив в качестве аргумента команде WP-CLI?"

Это, вероятно, невозможно, поскольку WP-CLI передает аргументы непосредственно wp_insert_posts . Я автоматизирую это с помощью wp eval . Например:

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

Идентификатор сообщения можно получить при создании сообщения с помощью --porcelain :

 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