Home › Forums › Bug Reports › get_field() resets $post?
Today i noticed strange behavior which seems caused by get_field function.
I have following code in page template file:
<?php
$args = array(
'numberposts' => 8,
'post_type' => 'items',
'order' => 'ASC'
);
$items = get_posts( $args ); ?>
....
<?php $i = 0; foreach( $items as $post ): setup_postdata($post); ?>
.....
<?php
_log($post);
$mods = get_field('mod');
_log($post);
So, before get_field() call logged $post value is correct, however after call the $post seems gets overwritten with global $post value of the page. Also it seems it happens only on first iteration of foreach.
I guess its not supposed to work in this way?
What is _log()
? I can’t find any reference to this function in WP or PHP.
Just an internal function i use for debugging. It saves variable state. I kept it in snippet to show that value of $post is checked right before and after of call of get_filed() function.
I guess the important question is, do you get the right output. If you loop through several posts and output post data and custom fields are the values output from the posts you’re looping over or from the global $post?
If it’s outputting the wrong data then you’ve probably got something else that may be interfering.
That is what i tried to show in first post:
1. In custom page template file (so global $post variable is set already) i create secondary loop using get_pages() (btw using WP_Query doesnt change anything).
2. I iterate through get_pages() results and use setup_postdata() to set global variables up.
3. Right before get_field() call i check $post value and its correct. Right after the call i check $post again and see that now it holds value of global $post.
4. Whole this thing seems happens only on first iteration. The rest of the loop data seems correct.
Finally if im commenting out get_field() call then $post values are correct for entire secondary loop. So i am pretty sure that whole this thing has something to do with ACF 🙂
I just did a quick test. I don’t have the same post types you have I just used posts. This is on a site that only has ACF active. The same post is output before and after using get_field()
, so I’m not seeing anything in ACF.
Unless it has to do with the specific field you’re getting. What type of field is 'mod'
?
$args = array(
'post_type' => 'post',
'order' => 'ASC'
);
$items = get_posts( $args );
foreach( $items as $post ) {
setup_postdata($post);
echo 'BEFORE<pre>'; print_r($post); echo '</pre>';
$field = get_field('test_field');
echo 'AFTER<pre>'; print_r($post); echo '</pre>';
}
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!
CPT registration is coming to ACF! We demoed the new feature during the most recent session of ACF Chat Fridays. Check out the summary for the details. https://t.co/k2KQ3WWBAz
— Advanced Custom Fields (@wp_acf) March 7, 2023
© 2023 Advanced Custom Fields.
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.