web-dev-qa-db-fra.com

wp_insert_post ou wp_set_post_terms n'enregistrent pas la taxonomie, mais wp_set_post_terms le fait

J'ai un petit problème. J'ai une taxonomie personnalisée 'rodzaj' avec la valeur i.ex. Obrazek. J'utilise ce code pour ajouter un post:

$postArray = array(
                'post_status' => 'publish',
                'post_author'=> get_current_user_id(),
                'post_category'=>array($catId),
                'post_title' => $_POST['titlePhoto'],
                'tax_input' => array( 'rodzaj' => array( 'obrazek') ) , 
);

Ce code ajoute un article mais sans taxonomie. J'ai aussi essayé ceci:

wp_set_object_terms($postId, "obrazek", 'rodzaj', false);

Ça ne marche pas aussi.

Le code de travail est:

wp_set_post_terms( $postId, array( 'obrazek'), 'rodzaj' );

Pourquoi les 2 premières fonctions ne fonctionnent pas?

J'ai fait une erreur au début. C'est un code de travail complet:

$catId = get_cat_ID("Obrazki");

         $postArray = array(
            'post_status' => 'publish',
            'post_author'=> get_current_user_id(),
            'post_category'=>array($catId),
            'post_title' => $_POST['titlePhoto'],
            'tags_input' => explode(',', $_POST['tagsPhoto'])
         );


         $postId = wp_insert_post($postArray);
         if($postId) 
         {
              wp_set_object_terms($postId, "obrazek", 'rodzaj', false);

          }

Ne fonctionne toujours pas: wp_set_post_terms ($ postId, "obrazek", 'rodzaj', false);

et 'tax_input' => array ('rodzaj' => array ('obrazek')) dans postArray ()

1
Chris

As-tu essayé:

wp_set_object_terms( $postId, array( 'obrazek'), 'rodzaj' );

wp_set_object_terms et wp_set_post_terms prennent les mêmes arguments. wp_set_post_terms utilise même wp_set_object_terms en interne. La principale différence est que vous avez utilisé un tableau dans celui qui a fonctionné et que vous n'avez pas utilisé un tableau dans celui qui n'a pas fonctionné.

1
Tom J Nowell

Si votre taxonomie est hiérarchique, le paramètre tax_input de wp_insert_post nécessite un tableau si id, et non slug.

'tax_input' => array(
  'name_of_taxonomy' => array(125) // say your term_id is 125
)

Après cela, vous devrez probablement mettre à jour le nombre de termes avec quelque chose comme ceci:

add_action('init','reset_terms_counts', 11, 0);
function reset_terms_counts(){

    $terms_ids = get_terms(array(
      'taxonomy' => 'taxonomy_name'
      ,'fields' => 'ids'
      ,'hide_empty' => false
    ));

    if(is_array($terms_ids)) wp_update_term_count_now($terms_ids, 'taxonomy_name');
  }
}
0
Luca Reghellin