Anexando dados de taxonomia para postar com wp_insert_post

17

Estou tentando implementar um sistema de postagem de front-end que mostra dados de taxonomia em vários campos de seleção suspensa. Cada um dos menus suspensos é nomeado usando o "nome" $argem 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 selecionado também é "local".

Em seguida, adiciono as variáveis ​​para cada uma das opções de taxonomia, assim como junto com 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'] );

Finalmente, adiciono as informações extras em um array pronto para ser enviado por wp_insert_post(). Estou bastante empolgado em saber se estou fazendo a coisa certa adicionando tax_inputà matriz como abaixo, pois é isso que eu entendo do códice que 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 enviei a nova postagem, todos os dados padrão da postagem (e também meu tipo de postagem personalizada) ficam ok, mas as taxonomias não. Obviamente, estou fazendo algo errado, mas o que?

MartinJJ
fonte

Respostas:

25

Use wp_set_object_termsdepois de ter o ID da postagem 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' );
Bainternet
fonte
Só não sei onde estaria sem a sua ajuda, trabalhei pela primeira vez ... muito obrigado Bainternet. Marcado como respondido
MartinJJ
I contente poderia ajudar :)
Bainternet
São $ location e $ sale_rental matrizes de números inteiros ou de strings?
Doug
5

Você pode fazer isso usando wp_insert_post , mas também deve especificar a taxonomia tax_input, para que fique assim:

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

Eu uso implode()para que $locationpossa 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 uma matriz em vez de adstringente.

Tomáš Kapler
fonte
2

Fonte do problema

Depois de alguma pesquisa sobre esse tópico, fui informado para verificar os internos (o que fiz). Como eu estava importando postagens de um feed externo como tipo de postagem personalizada, simplesmente defino o usuário como -1(em vez de adicionar um usuário bot). O problema que encontrei foi que, wp_insert_post()com um tax_inputconjunto, verifica internamente a capacidade do usuário, que obviamente não existe.

SysBot para o resgate

A solução foi que eu escrevi o plugin SysBot . Dessa forma, eu poderia simplesmente anexar o usuário SysBot (que tem o papel de editor ) a essa postagem recém-criada e tudo funcionou da maneira esperada.

kaiser
fonte