Я пытаюсь внедрить систему публикации внешнего интерфейса, которая отображает данные таксономии в нескольких выпадающих полях выбора. Каждое из выпадающих имен названо с помощью «имени» $arg
в wp_dropdown_categories()
.
wp_dropdown_categories( array(
'taxonomy' => 'location',
'hide_empty' => 0,
'orderby' => 'name',
'order' => 'ASC',
'name' => 'location',
) );
Как видите, таксономия - это «местоположение», а выбранное имя также «местоположение».
Затем я добавляю переменные для каждого из выпадающих списков таксономии, например, post_title, post_content и т. Д.
$title = trim( $_POST['wpuf_post_title'] );
$content = trim( $_POST['wpuf_post_content'] );
$tags = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat = trim( $_POST['cat'] );
$location = trim( $_POST['location'] );
$sale_rental = trim( $_POST['sale_rental'] );
$price = trim( $_POST['price'] );
Наконец, я добавляю дополнительную информацию в массив, готовый для отправки wp_insert_post()
. Я застрял в том, правильно ли я tax_input
поступаю, добавив в массив, как показано ниже, поскольку это то, что я понимаю из кодекса, что мне нужно сделать.
'tax-input' => array(
$location,
$sale_rental,
$price
),
Чтобы все это выглядело так:
$my_post = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => $post_status,
'post_author' => $userdata->ID,
'post_category' => array( $_POST['cat'] ),
'post_type' => $customcategory,
'tags_input' => $tags,
'tax_input' => array(
$location,
$sale_rental,
$price
),
);
$post_id = wp_insert_post( $my_post );
Однако, когда я отправил новое сообщение, все стандартные данные сообщения (а также мой пользовательский тип сообщения) в порядке, а таксономии - нет. Я явно делаю что-то не так, но что?
источник
Вы можете сделать это с помощью wp_insert_post , но вы также должны указать таксономию
tax_input
, чтобы она выглядела следующим образом:Я использую
implode()
так, чтобы это$location
мог быть массив с несколькими терминами.Также обратите внимание, что это работает только для неиерархических таксономий. Для иерархических таксономий вы должны предоставить массив вместо astring.
источник
Источник проблемы
После некоторого исследования этой темы мне сказали проверить внутренности (что я и сделал). Поскольку я импортировал посты из внешнего канала как пользовательский тип поста, я просто установил для пользователя значение
-1
(вместо добавления пользователя бота). Проблема, с которой я столкнулся, заключалась в том, чтоwp_insert_post()
сtax_input
набором внутренних проверок пользовательских возможностей, которые несуществующий пользователь, очевидно, не имеет.SysBot для спасения
Решением было то, что я написал плагин SysBot . Таким образом, я мог просто прикрепить пользователя SysBot (который играет роль редактора ) к этому вновь созданному посту, и все работало так, как ожидалось.
источник