Приєднання даних таксономії до публікації з wp_insert_post


17

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

Однак, коли я надсилаю нову посаду, всі стандартні дані про публікацію (а також мій типовий тип пошти) відповідають нормам, але таксономії - ні. Я очевидно роблю щось не так, але що?

Відповіді:


25

Використовуйте 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' );

Я просто не знаю, де я був би без вашої допомоги, працював перший раз ... велике спасибі Bainternet. Позначено як відповідь
MartinJJ

Радий, що можу допомогти :)
Bainternet

Чи є $ location та $ sale_rental масиви цілих чисел чи рядків?
Даг

5

Ви можете зробити це за допомогою wp_insert_post , але ви також повинні вказати таксономію tax_input, щоб це виглядало так:

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

Я використовую implode()так, що $locationміг би бути масив з декількома термінами.

Також зауважте, що це працює лише для неієрархічних таксономій. Для ієрархічних таксономій вам слід поставити масив замість астрингу.


2

Джерело проблеми

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

SysBot для порятунку

Тоді рішенням було те, що я написав плагін SysBot . Таким чином я міг просто долучити користувача SysBot (який виконує роль редактора ) до новоствореної публікації, і все працювало так, як і очікувалося.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.