web-dev-qa-db-fra.com

taxe_entrée ne fonctionne pas wp_insert_post

J'utilise wp_insert_post et tous les champs fonctionnent sauf tax_input. Y at-il quelque chose qui ne va pas avec mon code?

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

Merci d'avance

4
Shawn James

La raison la plus courante est que vous exécutez ce code sans contexte utilisateur (cron, etc.). Dans wp_insert_post(), contexte WP vérifiera si l'utilisateur dispose d'autorisations pour une taxonomie. Aucun utilisateur ne correspond à aucune autorisation ne correspond à aucun terme attribué.

La solution de contournement consiste à créer d'abord la publication, puis à lui attribuer des conditions. Lorsque des termes sont attribués explicitement via une méthode API (telle que wp_set_object_terms()), la vérification des autorisations n'est pas effectuée.

14
Rarst

Il s'avère que tax_input ne fonctionne pas si un utilisateur ne dispose pas des fonctionnalités nécessaires pour utiliser une taxonomie personnalisée:

wp-includes/post.php (wp_insert_post):  enter image description here 

Donc, soit ajouter les majuscules correctes, soit utiliser wp_set_object_terms()

3
Eduardo Marcolino

Comme vous l'avez dit dans un commentaire, le plugin fera les filtres et n'a pas de hook, je pense que le plugin doit avoir le hook wp_insert_post de toute façon. Sinon, comment insérez-vous le post? Je réponds à cette question depuis si longtemps parce que je suis confronté au même problème et trouve le seul moyen.

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

ici l'emplacement est le terme limace. Un jour, quelqu'un l'aura utile.

0
Tuhin Ahmed

Lors de l'utilisation de tax_input pour la post-insertion, assurez-vous d'utiliser le terme tax tax id, car les slugs ou les noms semblent être jetés.

$my_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_type'     => 'products',
'tax_input' => array('myTax', array(4,458,11478)),
);
0
user1180105