So, I have a function running if certain conditions are true, to add a post (custom post type), and update some ACF fields of the newly created post with this code:
$balance_post = array(); $balance_post['ID'] = 0; $balance_post['post_status'] = 'publish'; $balance_post['post_type'] = 'ik_balance'; $balance_post['post_title'] = $account->post_title . ' - ' . $transaction_date . ' - ' . $updated_balance; $balance_post_id = wp_insert_post($balance_post, true); update_field( 'field_5f1ddb03428dc', $updated_balance, $balance_post_id ); update_field( 'field_5f1ddb03428c8', $transaction_date, $balance_post_id ); update_field( 'field_5f1ddb03428bf', $account, $balance_post_id );
This works fine, the post is created and published. Editing the post in wp-admin shows the correct content in the fields. I can find the data in the database, and even get_field() works fine.
But when I run a wp_query with a meta_query to retrieve this newly created post it just isn’t found until I go to wp-admin, edits the post (without changing any field) and just clicking Update.
Then it suddenly works as expected and the post is retrieved with the query.
This is the query I’m using:
$args = array( 'post_type' => 'ik_balance', 'post_status' => 'publish', 'posts_per_page' => 1, 'fields' => 'ids', 'meta_key' => 'balance_date', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'balance_account', 'value' => $account_id, 'compare' => '=', ) ), ); $balance_query = new WP_Query( $args );
What am I missing?
I do not see how these are set
$account or what type of data these values have.
Also how any of these relate to the
balance_account field or what type of field this is and what
Thanks for your response @hube2 ! I’ll try to fill in:
The fields are set like this:
$updated_balance = get_field('updated_balance', $post_id); $transaction_date = get_field('transaction_date', $post_id); $account = get_field('transaction_account', $post_id);
updated_balance is a number field, where
transaction_date is a date field and
transaction_account is a post object field selecting a
All these fields are set on a new
ik_balance CPT post when a
ik_transaction CPT post is saved.
So, in the query, I’m first looping through all posts of the
ik_account CPT, getting only the post ID which is what’s populating
$account_id. Inside that loop, the above query fetches the last
ik_balance CPT where the
balance_account post object field equals
Hope this makes things at least somewhat more clear. Otherwise I’ll try to clarify further!
I don’t know if this is the cause of your problem or not
$account = get_field('transaction_account', $post_id);
returns a post object and not just the ID unless you have the field setting to return just the ID.
This may or may not return an array of post IDs it it allows multiple values.
To get just the post ID at this point you can also do
$account = get_field('transaction_account', $post_id, false);
This following expects the value to be a post ID or an array of post IDs depending on if the post object can hold multiple selections or not.
update_field( 'field_5f1ddb03428bf', $account, $balance_post_id );
A am assuming that this is saving the full post object into the field when load the field in the admin it is seeing that it is a full post object and correcting the saved value when you save.
Hmm, that could’ve been it, but changing
$account->ID doesn’t make a difference for the issue.
If it’s being updated with the right value then I haven’t got a clue why your query is not working. My next step would be to look in the database to see exactly what is being saved in that field.
Heureka! Your suggestion got me on the right track, it was the date field formatting that was the issue. My date field that was setting the
$transaction_date was setup to return Y-m-d, but when setting a date field with update_field it must be in Ymd format. So a simple conversion before update_field did the trick!
Thanks @hube2 for leading me on the right track! 🙂
You must be logged in to reply to this topic.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
Accordions are a great way to group related information while allowing users to interactively show and hide content. In this video, Damon Cook goes in-depth on how to create an accessible accordion block using ACF PRO’s Repeater field.https://t.co/RXT0g25akN— Advanced Custom Fields (@wp_acf) March 2, 2023
© 2023 Advanced Custom Fields.