tax_input non funziona con wp_insert_post

29 nov 2015, 19:35:09
Visualizzazioni: 14.7K
Voti: 10

Sto utilizzando wp_insert_post e tutti i campi funzionano tranne tax_input. C'è qualcosa di sbagliato nel mio codice?

$customtax =  array(
'product_link' => $link,         // Link del prodotto
'product_price' => $price,       // Prezzo del prodotto  
'product_description' => $desc   // Descrizione del prodotto
);
$my_post = array(
  'post_title'    => $title,     // Titolo del post
  'post_content'  => $content,    // Contenuto del post
  'post_type'     => 'products',  // Tipo di post personalizzato
  'tax_input' => $customtax      // Tassonomie personalizzate
);

Grazie in anticipo

0
Tutte le risposte alla domanda 7
2
28

La ragione più comune è che esegui questo codice senza un contesto utente (cron, ecc.). All'interno del contesto di wp_insert_post() WordPress verificherà se l'utente ha i permessi per una tassonomia. Nessun utente significa nessun permesso e quindi nessun termine assegnato.

La soluzione alternativa è creare prima l'articolo, poi assegnare i termini. Quando i termini sono assegnati esplicitamente tramite un metodo API (come wp_set_object_terms()) il controllo dei permessi non viene eseguito.

29 nov 2015 20:35:00
Commenti

Quindi la soluzione alternativa è usare wp_insert_post() senza tax_input e poi, una volta completato, utilizzare wp_set_object_terms()? Ma cosa succede se non è possibile? Ad esempio, un plugin che permette di filtrare gli argomenti per wp_insert_post() ma non ha un hook per quando l'operazione è completata. Questa risposta potrebbe funzionare ma sembra tutt'altro che ideale. C'è qualcosa di strano riguardo a wp_insert_post() e 'tax_input'. Sicuramente esiste una soluzione pulita e definitiva.

Chief Alchemist Chief Alchemist
28 dic 2016 18:13:08

Grazie! Mi stavo strappando i capelli chiedendomi perché funzionasse per me (loggato) e non per gli utenti (non loggati). (Sto cercando di aggiungere un CPT dopo l'invio di un modulo.) Probabilmente dovrebbe essere menzionato nella documentazione, perché non è affatto ovvio.

Studocwho Studocwho
19 set 2024 22:40:51
0
11

Risulta che tax_input non funziona se un utente non ha i permessi necessari per lavorare con una tassonomia personalizzata:

wp-includes/post.php (wp_insert_post): Descrizione dell'immagine

Quindi, o si aggiungono i permessi corretti oppure si utilizza wp_set_object_terms()

27 nov 2017 15:18:57
0

Come hai detto nel commento che il plugin gestisce i filtri e non ha hook, penso che il plugin debba comunque avere l'hook wp_insert_post. Altrimenti come inserisci il post? Rispondo dopo così tanto tempo perché ho affrontato lo stesso problema e ho trovato l'unica soluzione possibile.


$new_id = wp_insert_post($post_arr, true);
$status = wp_set_object_terms($new_id, $term_id, 'location');

dove location è lo slug del termine. Un giorno qualcuno troverà questo codice utile...

21 mar 2019 21:19:27
0

Quando si utilizza tax_input per l'inserimento di un post, assicurati di usare l'ID della tassonomia, poiché sembra che gli slug o i nomi vengano ignorati

$my_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_type'     => 'products',
'tax_input' => array('myTax', array(4,458,11478)),
);
6 ott 2016 16:46:36
1

La domanda è vecchia, ma ho comunque impiegato un bel po' di tempo per capire che wp_insert_post mostra questo comportamento quando viene utilizzato all'interno di un'azione cron.

Inserire il post e poi utilizzare wp_set_object_terms è un buon workaround, tuttavia, impostare l'utente corrente prima di inserire il post ha funzionato anche per me

$user_id = 1;
$user = get_user_by( 'id', $user_id );
wp_set_current_user( $user_id, $user->user_login);

$new_id = wp_insert_post($my_post);
26 apr 2020 04:55:12
Commenti

Questo non ha funzionato per me

Thiago Dias Thiago Dias
8 nov 2023 00:50:22
0

Come ha detto @Rarst, WordPress verifica durante la funzione wp_insert_post() se l'utente corrente ha il permesso di aggiungere termini di tassonomia. Puoi vedere questo controllo anche nel file post.php alla riga 3352:

    if ( current_user_can( $taxonomy_obj->cap->assign_terms ) ) {
        wp_set_post_terms( $post_ID, $tags, $taxonomy );
    }

Se stai eseguendo il codice wp_insert_post senza avere un utente autenticato, puoi impostare un utente corrente utilizzando il metodo wp_set_current_user().

    $user = get_user_by('ID', $user_id);

    if( $user ){

         wp_set_current_user( $user_id, $user->user_login );

    }
20 giu 2019 10:16:52
0

Forse la funzione wp_insert_post() è cambiata, o forse nessuno ha controllato il suo codice, ma la risposta al giorno d'oggi è:

$customtax =  array(
 'myTax' => array(1,2,3),
);

$my_post = array(
  'post_title'    => $title,
  'post_content'  => $content,
  'post_type'     => 'products',
  'tax_input' => $customtax
);

Dove 1,2,3 sono gli ID dei termini della tassonomia.

E sì, l'utente corrente dovrebbe essere in grado di assegnare i termini, altrimenti prova a usare la funzione wp_set_object_terms() dopo wp_insert_post().

28 giu 2023 15:03:21