tax_input nu funcționează în wp_insert_post - Soluții

29 nov. 2015, 19:35:09
Vizualizări: 14.7K
Voturi: 10

Folosesc wp_insert_post și toate câmpurile funcționează, cu excepția tax_input. Este ceva greșit în codul meu?

$customtax =  array(
'product_link' => $link,
'product_price' => $price,
'product_description' => $desc );
$my_post = array(
  'post_title'    => $title,
  'post_content'  => $content,
  'post_type'     => 'products',
  'tax_input' => $customtax
);

Mulțumesc anticipat

0
Toate răspunsurile la întrebare 7
2
28

Motivul cel mai frecvent este că executați acest cod fără contextul utilizatorului (cron, etc.). În contextul funcției wp_insert_post(), WordPress va verifica dacă utilizatorul are permisiuni pentru o taxonomie. Lipsa utilizatorului înseamnă lipsa permisiunilor, ceea ce duce la neatribuirea termenilor.

Soluția este să creați mai întâi articolul, apoi să atribuiți termenii acestuia. Când termenii sunt atribuiți explicit prin metode API (cum ar fi wp_set_object_terms()), verificarea permisiunilor nu este efectuată.

29 nov. 2015 20:35:00
Comentarii

Deci soluția alternativă este să folosești wp_insert_post() fără tax_input și apoi, odată ce acesta este finalizat, să folosești wp_set_object_terms()? Dar dacă acest lucru nu este posibil? De exemplu, un plugin care îți permite să filtrezi argumentele pentru wp_insert_post(), dar nu are niciun hook pentru momentul în care acesta este finalizat. Acest răspuns ar putea funcționa, dar nu pare ideal. Există ceva ciudat în legătură cu wp_insert_post() și 'tax_input'. Cu siguranță, există o soluție curată și corectă.

Chief Alchemist Chief Alchemist
28 dec. 2016 18:13:08

Mulțumesc! Îmi smulgeam părul din cap întrebându-mă de ce funcționa pentru mine (autentificat), dar nu și pentru utilizatori (neautentificați). (Încerc să adaug un cpt după trimiterea unui formular.) Ar trebui probabil menționat în documentație, pentru că nu este deloc evident.

Studocwho Studocwho
19 sept. 2024 22:40:51
0
11

Se pare că tax_input nu funcționează dacă un utilizator nu are capacitățile necesare pentru a lucra cu o taxonomie personalizată:

wp-includes/post.php (wp_insert_post): Detalii despre funcționarea tax_input în WordPress

Deci, fie adăugați capabilitățile corecte, fie utilizați wp_set_object_terms()

27 nov. 2017 15:18:57
0

După cum ai menționat în comentariu că plugin-ul va face filtrele și nu are hook, cred că plugin-ul trebuie să aibă hook-ul wp_insert_post oricum. Altfel, cum inserezi postul?

Răspund la această întrebare după atât de mult timp pentru că am întâmpinat aceeași problemă și am găsit singura soluție posibilă.


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

Aici, "location" este slug-ul termenului. Poate într-o zi, cineva va găsi acest lucru util..

21 mar. 2019 21:19:27
0

Când utilizați tax_input pentru inserarea postărilor, asigurați-vă că folosiți ID-ul de taxonomie al termenului, deoarece se pare că slug-urile sau numele sunt ignorate

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

Întrebarea este veche, dar tot am petrecut destul de mult timp să înțeleg că inserarea postării (wp_insert_post) arată acest comportament atunci când este folosită în interiorul acțiunii cron.

Inserarea postării și apoi wp_set_object_terms este o soluție bună, totuși, setarea utilizatorului curent înainte de inserarea postării a funcționat și pentru mine

$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
Comentarii

Nu a funcționat pentru mine

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

După cum a menționat @Rarst, WordPress verifică în timpul funcției wp_insert_post() dacă utilizatorul curent are permisiunea de a adăuga termeni de taxonomie. Puteți vedea acest lucru și în post.php Linia:3352

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

Dacă rulați codul wp_insert_post fără a avea un utilizator autentificat, puteți seta un utilizator curent folosind metoda wp_set_current_user().

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

    if( $user ){

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

    }
20 iun. 2019 10:16:52
0

Poate funcția wp_insert_post() s-a schimbat, sau poate nimeni nu s-a uitat în codul ei, dar răspunsul în prezent este:

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

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

Unde 1,2,3 sunt ID-urile termenilor taxonomiei.

Și da, utilizatorul curent ar trebui să poată atribui termeni, altfel încercați să folosiți funcția wp_set_object_terms() după wp_insert_post().

28 iun. 2023 15:03:21