Associare i dati della tassonomia al post con wp_insert_post

25 mag 2011, 17:25:48
Visualizzazioni: 44.5K
Voti: 23

Sto cercando di implementare un sistema di pubblicazione frontend che mostra i dati della tassonomia in diversi campi select dropdown. Ciascuno dei dropdown viene nominato utilizzando l'argomento "name" $arg in wp_dropdown_categories().

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

Come puoi vedere la tassonomia è "location" e anche il nome del select è "location".

Successivamente aggiungo le variabili per ciascuno dei dropdown delle tassonomie insieme a post_title, post_content ecc:

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

Infine aggiungo le informazioni extra in un array pronto per essere inviato da wp_insert_post(). Sono abbastanza incerto se sto facendo la cosa giusta aggiungendo tax_input nell'array come mostrato sotto, dato che questo è ciò che ho capito dal codex che devo fare.

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

Così che alla fine appare tutto in questo modo:

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

Tuttavia, quando invio il nuovo post, tutti i dati standard del post (e anche il mio custom post type) vengono inseriti correttamente ma le tassonomie no. Ovviamente sto facendo qualcosa di sbagliato, ma cosa?

0
Tutte le risposte alla domanda 3
3
37

Utilizza wp_set_object_terms dopo aver ottenuto l'ID del post per ciascuna tassonomia:

...
$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' );
25 mag 2011 17:34:58
Commenti

Non so proprio dove sarei finito senza il tuo aiuto, ha funzionato al primo colpo... mille grazie Bainternet. Contrassegnato come risolto

MartinJJ MartinJJ
25 mag 2011 17:45:27

Felice di essere stato d'aiuto :)

Bainternet Bainternet
25 mag 2011 17:50:01

$location e $sale_rental sono array di interi o di stringhe?

Doug Doug
24 ott 2014 00:47:41
0

Puoi farlo utilizzando wp_insert_post, ma devi specificare anche la tassonomia in tax_input, quindi dovrebbe apparire così:

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

Uso implode() in modo che $location possa essere un array con più termini.

Inoltre, nota che questo funziona solo per tassonomie non gerarchiche. Per tassonomie gerarchiche devi fornire un array invece di una stringa.

17 set 2012 15:00:33
1

Origine del problema

Dopo alcune ricerche su questo argomento, mi è stato suggerito di controllare gli interni (cosa che ho fatto). Durante l'importazione di articoli da un feed esterno come custom post type, avevo semplicemente impostato l'utente a -1 (invece di aggiungere un utente bot). Il problema in cui mi sono imbattuto era che wp_insert_post() con un tax_input impostato, controlla internamente una capability dell'utente, che ovviamente un utente inesistente non possiede.

SysBot come soluzione

La soluzione è stata scrivere il plugin SysBot. In questo modo ho potuto semplicemente associare l'utente SysBot (che ha il ruolo di editor) al nuovo articolo creato e tutto ha funzionato come previsto.

25 gen 2013 23:05:04
Commenti

Questo spiega perché wp_insert_post quando eseguito via cron non inseriva i termini della tassonomia!

MediaFormat MediaFormat
1 set 2023 17:00:18