Allegare i dati di tassonomia da pubblicare con wp_insert_post


17

Sto cercando di implementare un sistema di registrazione front-end che mostra i dati di tassonomia in diversi campi di selezione a discesa. Ciascuno dei menu a discesa viene chiamato utilizzando il "nome" $argin wp_dropdown_categories().

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

Come puoi vedere, la tassonomia è "posizione" e anche il nome selezionato è "posizione".

Aggiungo quindi le variabili per ciascuno dei menu a discesa di selezione della tassonomia in questo modo 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 piuttosto bloccato sul fatto che sto facendo la cosa giusta aggiungendo tax_inputnell'array come di seguito in quanto questo è ciò che capisco dal codice che devo fare.

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

In modo che tutto finisca così:

$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 ho inviato il nuovo post, tutti i dati dei post standard (e anche il mio tipo di post personalizzato) vanno bene, ma le tassonomie no. Sto ovviamente facendo qualcosa di sbagliato ma cosa?

Risposte:


25

Utilizzare wp_set_object_termsdopo avere l'ID 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' );

Semplicemente non so dove sarei senza il tuo aiuto, ho lavorato la prima volta ... molte grazie Bainternet. Contrassegnato come risposto
MartinJJ,

Sono contento di
poterti

$ Array e $ sale_rental sono array di numeri interi o di stringhe?
Doug,

5

Puoi farlo usando 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()così che $locationpotrebbe essere un array con più termini.

Inoltre, nota che questo funziona solo per tassonomie non gerarchiche. Per le tassonomie gerarchiche è necessario fornire un array invece di astrare.


2

Fonte del problema

Dopo alcune ricerche su questo argomento, mi è stato detto di controllare gli interni (cosa che ho fatto). Mentre stavo importando post da un feed esterno come tipo di post personalizzato, ho semplicemente impostato l'utente su -1(invece di aggiungere un utente bot). Il problema che ho riscontrato è stato che wp_insert_post()con un tax_inputset controlla internamente la capacità di un utente, che ovviamente un utente inesistente non ha.

SysBot per il salvataggio

La soluzione quindi è stata che ho scritto il plugin SysBot . In questo modo potrei semplicemente collegare l'utente SysBot (che ha il ruolo di editore ) a quel post appena creato e tutto ha funzionato come previsto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.