Прикрепление данных таксономии к сообщению с помощью wp вставить сообщение


Я пытаюсь внедрить переднюю систему учета, которая отображает данные таксономии в нескольких раскрывающихся полях выбора. Каждому из выпадающих списков присваивается имя с помощью "name" $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 );

Однако, когда я отправил новое сообщение, все стандартные данные сообщения (а также мой пользовательский тип сообщения) были в порядке, но таксономии - нет. Я явно делаю что-то не так, но что?

Author: Howdy_McGee, 2011-05-25

3 answers

Использовать wp_set_object_terms после того, как у вас будет идентификатор записи для каждой таксономии:

...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );
 33
Author: Bainternet, 2015-10-26 20:29:51

Вы можете сделать это с помощью wp_insert_post, но вы также должны указать таксономию в tax_input, поэтому она должна выглядеть так:

$item['tax_input'] = array (
    'location'      => implode( ',', $location ),
    'sale_rental'   => implode( ',', $sale_rental ),
    'price'         => implode( ',', $price ),
)

Я использую implode() так что $location может быть массивом с несколькими терминами.

Кроме того, обратите внимание, что это работает только для неиерархических таксономий. Для иерархических таксономий вы должны указать массив вместо строки.

 6
Author: Tomáš Kapler, 2015-10-26 20:32:17

Источник проблемы

После некоторого исследования этой темы мне сказали проверить внутренние органы (что я и сделал). Поскольку я импортировал сообщения из внешнего канала в качестве пользовательского типа сообщения, я просто установил для пользователя значение -1 (вместо добавления пользователя-бота). Проблема, с которой я столкнулся, заключалась в том, что wp_insert_post() с набором tax_input внутренне проверяет возможности пользователя, которых, очевидно, нет у несуществующего пользователя.

Sysbot для спасения

Решение тогда состояло в том, что я написал Плагин sysbot. Таким образом, я мог бы просто прикрепить пользователя SysBot (у которого есть роль редактора ) к этому недавно созданному сообщению, и все работало так, как ожидалось.

 2
Author: kaiser, 2013-01-25 21:05:04