Anexando dados de taxonomia para postar com wp_insert_post

15

Estou tentando implementar um sistema de postagem de front end que mostra dados de taxonomia em vários campos de seleção suspensos. Cada um dos menus suspensos é nomeado usando o "nome" $arg em wp_dropdown_categories() .

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => 'location',
) );

Como você pode ver, a taxonomia é "local" e o nome de seleção também é "local".

Em seguida, adiciono as variáveis para cada lista suspensa de seleção de taxonomia, assim como post_title, post_content etc:

$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'] );

Por fim, adiciono as informações extras em uma matriz pronta para ser enviada por wp_insert_post() . Eu estou bastante preso em saber se estou fazendo a coisa certa adicionando tax_input na matriz como abaixo, pois é isso que eu entendo do códice que eu preciso fazer.

'tax-input' => array( 
    $location,
    $sale_rental,
    $price
),

Para que tudo acabe assim:

$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 );

No entanto, quando eu enviei o novo post, todos os dados de postagem padrão (e também meu tipo de postagem personalizado) estão ok, mas as taxonomias não. Eu obviamente estou fazendo algo errado, mas o que?

    
por MartinJJ 25.05.2011 / 16:25

3 respostas

23

Use wp_set_object_terms depois de ter o ID do post para cada taxonomia:

...
$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' );
    
por Bainternet 25.05.2011 / 16:34
5

Você pode fazer isso usando wp_insert_post , mas você deve especificar a taxonomia também em tax_input , por isso deve parecer assim:

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

Eu uso implode() para que $location possa ser uma matriz com vários termos.

Além disso, observe que isso funciona apenas para taxonomias não hierárquicas. Para taxonomias hierárquicas, você deve fornecer um array ao invés de astring.

    
por Tomáš Kapler 17.09.2012 / 14:00
2

Origem do problema

Depois de algumas pesquisas sobre este tema, me disseram para verificar as partes internas (o que eu fiz). Como eu estava importando mensagens de um feed externo como tipo de postagem personalizada, simplesmente defini o usuário como -1 (em vez de adicionar um usuário de bot). O problema que encontrei foi que wp_insert_post() com um tax_input set, internamente, verifica a capacidade de um usuário, que obviamente um usuário não existente não possui.

SysBot para o resgate

A solução foi que eu escrevi o plug-in SysBot . Desta forma, eu poderia simplesmente anexar o usuário SysBot (que tem o papel de editor ) ao post recém-criado e tudo funcionou da maneira esperada.

    
por kaiser 25.01.2013 / 22:05