Sometimes you just have to “say things out loud” to realize things like this–or in our case, post them to the support forum. Thanks for your help! It was causing me great agony in trying to test the custom system.
Well, I figured it out–I incorrectly set the args for the wp_update_post(), using 'post_id' when I should have used 'ID' to define the argument for the post’s ID. Correcting this had rendered the function to work correctly.
Thank you for all your help, John!
I am getting the correct $status value from the form. However, the 'post_status' => $status is not being correctly passed from the filter acf/pre_post_save as shown in the function above. Regardless of the value of $status, it still saves the post as published. I’ve even left the post_status definition in the acf_form() declaration undefined and blank just to see.
The value of $status is not being applied correctly.
I updated the $_POST['submitted']. Using the filter, if I submit the form with “submitted” unchecked (you can see where $status was output using echo and it show ‘draft’ as intended):
Array
(
[_acfnonce] =>
[_acfchanged] => 1
[_acfform] => a1hNb1hBTmg2Z0J1V3BDbTdpbm5qeDVNcVNUOEI0OElsb05hMmtDaFpBdlFOS29HaURtZFZkVTJrQ0JlUGFNRms4bkE3K0Q5M3NHeFBodTdCRmFjdVczbEFPZ0pnOFNOcmdsempQaDdBS2NVUTJEbitXQldpM2JtQmpZMnVGdC83NHZoNFNYNjE0dzlteXFDb1ZSdVBiVkE5Uk4zZ0xxZVZQTXkwUDBVK3BBMndxZnZiYlRWN1BZejF4Z2J4RWVkSTdZL2xLWU1GdEFBcnVCekhwQjRGTnU5MCtMc2N4VzJVdGoxR2JSRTlYL2RicDh3VllIUCs2SHc1T0dtbEIxZnVSb21IVGlTcVh0bUhrZWxmc2RtWFhna0lXU25zTzlrcWxsajJZdVh6WllDLysyRzNHZU9YUmFlZ0xPOXNramo5b1kyZHBwVUJjN1dXaTEwUmV0OUdiUlR4RkxOcGt5d3BjUllDYTVvQlMrdzlEK2hlVjdUamltbndaOXNoQ3ZWUzJhTzhqNmN2QmlPQUU3R213ZEdnd3J4Lzd6dTBHZnN2MEh1OE1hQzFsY0t3UEZDWFpxR3F1L0RHVitKZ2dDN3Q0aUJJSWo1WmxKaU95NlY1dUR6TjYvZ2RVbFFYTnVoQVNpMElQVWRhMmpCcDNwOFk1a3psVkMrb29qak5QVUVJbGVhT3RFdC9GSTBNa0pVOTJLR2d4NEZDdmpHd1hLQ2JldVJENHhKbmEwWitJQnRtVEVWdUZKT0Z5Y3BVUGovcndFc0xjTUEyb1gva0JXMk4xWlI2N2IzWUd3bkphWjNyY0kvYVBtK3V4MmVtbUhDc2Y0MzZxUXVuVCtLRHplOXFBSnkxKzRaRE5PNjA4Q21KWmdUV3Y1bWVlS1ZkM0tlbGRyemd0OGFTTkhEdzNFWXRUNTN4R2FaM3VNV2pMaE1QWGVpZFdnUGUrYzdJbjBqQnN6Tk9OYWVSYnpUdU1iWlBBZmxLZWdzUnk3amUxcVVHQ3l3YVVGY21kclpXcUhQN2Mrb2x4N2xKT0lKYnh2QmtaZ29EOWhhR1VybnpEV0NtN1h2QlQ0SjBJaWxFS1Q2QW1XL1VVRFpyQjcwdUlHUmh2QVFmN2p5aFlJVVpDc2QyaHNsSVdRdC82WElvdnpKd2t1aWxYMWQ1cVhkbjdrQk9uT3JwV2FWdG9qQlBSQk93Nk9sLzE1WXpOMmtTcEdBSVVCWlRCSnRKNXRCYkF5SWY0Qk0wemVENGpiRW1EZUNDa1EvZktLTlpwVEdQLzlFb1lWRDh5SnVHVzVPb25qZTlEZEtGZHRlVUtFRGRhQUFnditKSzJOUmpscWtxeDQxVlFhWkdGTFFHQk96aFlXemc0NWFnd0IyeW95V2JqM28rQ1RIUFl1QXJkdEtFRG56OVRPMGEyUVhlSlJNSno5RG1KNnBhMEN6VGtzTS9SYmhCeEYvTkZzU2xxdUh4ZkdFaTAvdk9aZTZveHBVWXlPRXEwbmRha01qL3MybUs1ZUVZYTZYczAzS21vLy9EamNTVmoyUmVnT091eUlWWHFSVjYxd2RRSms5YmJ3Z1JndWIzbHQyNUUyYmNvZTlNYXZpcmsyQ0NVUk5VK0xrc2JvblNaL3dqWlNIVHB4Z2twWWlmMjNOQ2c9PTo6owsszaga9XIEzYCy+P8j9Q==
[acf] => Array
(
[field_58dff18e13f03] => Test
[field_58dff21213f05] => Test
[field_58dff27513f08] => Test
[_validate_email] =>
)
)
draft
With the checkbox checked you can see $status outputs ‘submitted’ as intended:
Array
(
[_acfnonce] =>
[_acfchanged] => 1
[_acfform] => ME1VRWtzdzJLVVo5TXBmZWphZFJMNkJ4T0JobzZpNFZlOFp2NDNkUi9SWUtjYmhFblExQkxSem5WaHVSNnZ1UFhQQlZML0xpYW1vQkZWZ1Rnb3k5ZGtIYUVLYlJvc2NOQ3hCbldqd0NMTVgvNkdEUjg4NnU3emlyZXJlN2hoRjlmVkplNy8rR0xNRXZUdHh5YVN0a081K1oyWDUyOFRJcFZBeFVIN2ZUaFhHTjY1UG42WWdaSUxrZzhyTXFTTTJuN1FDQklMTERCbVIySjM3R3hXS0RzakU2MnJLZkNQWXpONjYxT3prdXNRQ0RnT2xaZGVjSWdwMDFIYUxWTlExNkxaaHZLZkZoUUt5MzBybWs4MzczaUtMZFlmMXlKNkMzaVhnempSS1RCZmozZXE0Z0lPUHpTU3lWVkRIWFZ1SnhMTldJZHRtbDA1Y245NDNjQm9Mei85TVZsbjVoS2xvaVRUaFYxem9ma1hQcEJabjZCMGdJdjh4OWZrVW15S3RRRi93TVM3bkdUamFXM2oxWmVIdytEbko1YzZMV3Ztdm8ybnBsRllsTExGcnBncG5WbUVOSmZHNG0vS3dZUklzRnBBT0VoaGcyVlBXWGlWb2xJTmFhNkhGWGtzSitmQWdZUUxhbXBGZzdiMkhVQlJPUVM2L2V0T2VRbWV3ZHRGTlRsR1VRamxZbzY5K1BDU1c5Y1p5NFVhTWhOWkM5dkJXZFBFNWZ0MkVDWDZVQ0tSU0k1T0x1OVB6enhRT1B6R01OWVg5UE9hZjlLN0d2Rk1XalVrdnMzbW1VUGpZWk9Odk1iL2tUUmQ2dUFIWVNIU2l2ZlNnYkVUZmlYMnV1cUU2eXJDdTNINWFyMzR4dUpNZElTY0ZUdEl0UlcrR1paa004anJIWlNybStFbXNxVkNDdGpnNlk2RjI1VGZHTXN1SkFDZG5GTmRnYWk5T2paY2Q2Mjhsa0Fvcmhrek1maWZjTVBxY2NXMW9palVrYXZTMTZKUTQ0dEpuMDBra0JuUXJpSlVFSTFlbi9NQ0lZeUd0VnE4QXozRk84c1UwVHFRa205WFAzdDFCeXJkR1N4ZFhyeVh4OWJDdHlsQ2Q0ZWVkSzRBQW5JZWpBQ25ycE81a2NJaHR4dE1HS0VHbnZwM2VNbnc5V0RDOXA2WVlWR3VXeGE4VWpPeEtHVThqejdLcU1sWHRJWnVidHRCYld0VzRsL0NEc1hnS1V6Mko5a2JhbW4rWDljS2c3UWxCWS9BZ05sNFd0dUYydEd5R3F4TFFseWVtdFNCYUw3Z1dxcFVSRzVNTjl0VXA2M1RuMzc5WGNJd0JJTjVsaDZJTDc3b3R1cVhkdVJtQ0c0ckt0ODVTdXNmdy8yTGMwM2VNKzc5cnUxWjJ5cURhWENTOWlhWENvZHdEOWpicjkzL25tMEtReE1ZMHhTajM2K2g5bEUzUzJmemNBMHYreDYwRGhNNHFNMXYzZEpHYWFsR0dkNkpMQXVQaE9vUWxaRmpvRjNGenhnNWc5RTAwSXQvb3h1S2haSXZLd2doaitvcTRKWGRKSVE4TlNJSkNqQTRIdEM2Y0Nzd3Q0Y3g5cytNTENIR0NldEtaNFlZeW1nekVFWGtraXRaWk0vbTBKMlBMSmxpdmNUbnF3Z2c9PTo6/ovmIPCQDeflxg6kNBOk6Q==
[acf] => Array
(
[field_58dff18e13f03] => Test
[field_58dff21213f05] => Test
[field_58dff27513f08] => Test
[_validate_email] =>
)
[submitted] => submitted
)
submitted
Hi John,
Thank you for your reply–I have the checkbox as an added field outside of the actual ACF form. I did test the function (see revised function below to see how I tested) for a scenario with the checkbox both checked and unchecked. In each case, the variable $status is being set correctly. But, it’s not being set correctly on save.
The form:
<form id="new-program" class="new-program" action method="post">
<?php acf_form( array(
'post_id' => 'new_post',
'new_post' => array(
'post_type' => 'program',
),
'submit_value' => 'Submit Program',
'id' => 'new-program',
'post_title' => true,
'post_content' => false,
'form' => false,
'return' => $return_url,
'label_placement' => 'top',
'instruction_placement' => 'label',
'uploader' => 'basic',
'field_el' => 'ul',
'fields' => array(
'program-submission_blind_description',
'program-submission_blind_abstract',
'program-submission_blind_learneroutcomes',
),
)) ; ?>
<input type="checkbox" id="submitted" name="submitted" value="submitted" />
<label for="submitted" id="label-submitted">
I confirm that my submission is complete and ready for review. I understand that once I submit this program, I cannot edit it.
</label>
<button type="submit">Save Draft</button>
</form>
The filter:
add_filter( 'acf/pre_save_post', 'merge_pre_save_post', 10, 1 );
function merge_pre_save_post( $post_id ) {
if( is_admin() ) :
return;
endif;
//Set the status based on the form
if( $_POST['acf']['submitted'] == 'submitted' ) : $status = 'submitted'; else : $status = 'draft'; endif;
//FOR TEST ONLY
print_r( $_POST );
echo $status;
exit;
//Check if it's not a new post
if( $post_id != 'new_post' ) :
wp_update_post( array(
'post_id' => $post_id,
'post_status' => $status,
) );
//
else :
$post_id = wp_insert_post( array(
'post_status' => $status,
) );
endif;
return $post_id;
}
In both cases–checked and unchecked–the value for $status is correct; it’s just not being applied to the post correctly.
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!
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 Privacy Policy. If you continue to use this site, you consent to our use of cookies.