Home › Forums › General Issues › has_sub_field won't work after POST request
Hello guys,
I stumbled upon a strange issue that took already too much time.
I have a custom post type with many custom fields and I fetch them with the standard ACF functions. I also have a button which sends a form via POST request. Now if you click this button and the page reloads, the has_sub_field loop suddenly doesn’t work anymore. However, get_field works perfectly. This is really strange to me and I haven no solution for this. Do I miss something? I provide you some code:
function pdf_button(){
global $post;
$id = $post->ID;
echo get_field( 'description_titel', $id);
while(has_sub_field('schritte', $id)):
echo ("Schritt<br>");
endwhile;
return '<form method="post" id="fdpf-form">
<input type="hidden" name="post_id" value="'.$id.'" />
<button class="button button-primary"
type="submit"
name="generate_posts_pdf"
value="generate">Als PDF herunterladen
</button>
</form>';
}
This code is added via shortcode. You see, there is a button. If I click this button , the page reloads and the while-loop just doesn’t appear.
What can I do?
The first thing I would do is check the global $post ID to make sure that’s what you expect it to be. You can error_log( print_r( $post, 1 ) );
if you have error logging turned on. That would be the only thing I can thing of that would be messing up actually getting the field content.
Thanks for the reply!
The $post and its ID are actually fine, I checked them. Otherwise the get_field function wouldn’t work as well.
So at first everything works, you can see the echoed ‘description_titel’ and then a few times ‘Schritt’ because of the has_sub_field-loop.
But if you press the button and the page reloads, you only see the echoed ‘description_titel’ which means that get_field works but has_sub_field doesn’t. And that really confuses me.
Let’s say we can’t make it work this way, which other possibilities do I have to get the desired fields?
P.S Maybe it is a version conflict?
ACF version: 5.6.8
WP version: 4.9.8
Alright, I managed to solve the problem by using the native get_post_meta() function.
The reason I needed this post request is a button in a form that prints a PDF of my custom post type. And after you press the button, a POST request is fired. Maybe there are better solutions but I sticked for it and didn’t want to change it.
First, I found out how many subfields there are:
$stepcount = get_post_meta($id, 'schritte')[0];
Then, I itereated:
for ($i = 0; $i < $stepcount; $i++) {
echo ($i+1).". ".get_post_meta($id, 'schritte_'.$i.'_schritt_beschreibung')[0]."<br>";
}
The most important part is the field name (schritte) and the subfields $i__schritt_beschreibung. schritt_beschreibung is the slug of the subfield.
I hope it helps
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!
Are you building WordPress sites with ACF and @BeaverBuilder, and wanted to use your ACF Blocks in both the block editor and Beaver Builder?
— Advanced Custom Fields (@wp_acf) May 10, 2023
The BB team recently added support for using ACF Blocks in Beaver Builder. Check it out 👇https://t.co/UalEIa5aQi
© 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.