I have a Custom Post Type called eyeglasses and Custom Taxonomy called models. I also created two terms for taxonomy called M156 and M120. Now I am trying to upload two post for test through wp_insert_post.

This is adding the $title to the post_title of eyeglasses but not adding or updating the term of the post.

function we_load_posts($title, $term)
        "post_type" => "eyeglasses",
        "post_title" => $title,
        "tax_input" => array(
                             "models" => array($term)
        "post_status" => "publish"
we_load_posts("Montana", "M156");
we_load_posts("Havana", "M120");

can you please let me know what I am missing or doing wrong here?


Few points come to mind:

  1. There is a typo in "post_type" => "'eyeglasses" (extra single quote). It should be: "post_type" => "eyeglasses".

  2. Try putting the $term instead of array( $term ):

    "tax_input" => array(
        "models" => $term
  3. Also, is it models or model? e.g.

    "tax_input" => array(
        "model" => $term
  4. tax_input requires assign_terms capability. So if the user you are running this CODE with, doesn't have that capability, it'll not work.

    In that case, the right way is:

    $post_id = wp_insert_post(array(
        "post_type" => "eyeglasses",
        "post_title" => $title,
        "post_status" => "publish"
    wp_set_object_terms( $post_id, $term, 'model' );
| improve this answer | |
  • Thanks for reply Nazaria, on (1) - Thanks I fixed the typeo, on (2) - I removed the $term out of array on (3 ) - models is the name that I use to register the taxonomy. I fixed 1 and 2 as you said but still not able to add the terms with this code. On (4) I am not sure how to get the $post_id as I am running this code in a PHP file out of the theme directory by including wp-load.php to the file so not sure how this is gonna work! I just need this script for one time only upload – Behseini Sep 5 '18 at 6:09
  • 3
    The number 4 actually worked! Thanks a lots – Behseini Sep 5 '18 at 6:15
  • Thanks but can u please give me more hint on this ` you need to insert autho` – Behseini Sep 5 '18 at 6:16
  • Check documentation, wp_insert_post argument array needs post_author. By default, WordPress takes the currently logged in user ID, however, depending on how you are running the external script, there may not be a logged in author. So, it's better if you provide an author id, like: "post_author" => 1 – Nazaria Sep 5 '18 at 6:19
  • So if you don't provide an author ID and no author is logged in, WP will insert 0 as author. – Nazaria Sep 5 '18 at 6:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.