I am trying to implement a front end posting system which shows taxonomy data in several dropdown select fields. Each of the dropdowns is named by using the “name” $arg
in wp_dropdown_categories()
.
wp_dropdown_categories( array(
'taxonomy' => 'location',
'hide_empty' => 0,
'orderby' => 'name',
'order' => 'ASC',
'name' => 'location',
) );
As you can see taxonomy is “location” and the select name is also “location”.
I then add the variables for each of the taxonomy select dropdowns like so along with post_title, post_content etc:
$title = trim( $_POST['wpuf_post_title'] );
$content = trim( $_POST['wpuf_post_content'] );
$tags = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat = trim( $_POST['cat'] );
$location = trim( $_POST['location'] );
$sale_rental = trim( $_POST['sale_rental'] );
$price = trim( $_POST['price'] );
Finally I add the extra info into an array ready to be sent by wp_insert_post()
. I’m quite stuck on whether I am doing the right thing by adding tax_input
into the array like below as this is what I understand from codex that I need to do.
'tax-input' => array(
$location,
$sale_rental,
$price
),
So that it all ends up looking like this:
$my_post = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => $post_status,
'post_author' => $userdata->ID,
'post_category' => array( $_POST['cat'] ),
'post_type' => $customcategory,
'tags_input' => $tags,
'tax_input' => array(
$location,
$sale_rental,
$price
),
);
$post_id = wp_insert_post( $my_post );
However, when I submitted the new post, all the standard post data (and also my custom post type) goes in ok but the taxonomies do not. I’m obviously doing something wrong but what?
Use wp_set_object_terms
after you have the post id for each taxonomy:
...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );