php - How to save ACF custom fields data when a plugin triggers the WordPress save_post hook
I have a plugin which is triggering the save_post
hook of WordPress upon creating posts. The plugin is a scrape plugin. I need added some code to functions.php
file which should save the data once the save_post
hook is triggered by this plugin.
What my code is doing:
- Fetches the data from one of the fields
howtoapply
. - Puts the data after formatting it as required into the new field
application_email
using some PHP code as you can see below.
Right now, without using the save_post
hook, the acf field application_email
data is not saved in the postmeta table. However, upon clicking edit the post (which refreshes the post), the data is saved without even having to click on the Update button.
How do I run this code when the save_post
WordPress hook is triggered by the plugin because only then can the plugin save my custom fields data alongside the data being crawled.
The code:
add_filter('acf/load_field/name=application_email', function( $field ) {
$howtoapply = get_field( 'howtoapply' );
$apply_link = get_field( 'howtoapply' );
$link = $apply_link;
libxml_use_internal_errors( true );
$dom = new DOMDocument();
@$dom->loadHTML( $link );
$dom->loadHTML( $link );
foreach ( $dom->getElementsByTagName( 'a' ) as $a ) {
}
function cfDecodeEmail( $encodedString ) {
$k = hexdec( substr( $encodedString, 0, 2 ) );
for ( $i = 2,$email = '';$i < strlen( $encodedString ) - 1;$i += 2 ) {
$email .= chr( hexdec( substr( $encodedString, $i, 2 ) ) ^ $k );
}
return $email;
}
if ( ! is_null( $a ) && is_object( $a ) ) {
$field['value'] = cfDecodeEmail( $a->getAttribute( 'data-cfemail' ) );
$GLOBALS[ $field['value'] ] = cfDecodeEmail( $a->getAttribute( 'data-cfemail' ) );
if (!add_post_meta(get_the_ID(), 'application_email', $field['value'])) {
//update_post_meta(get_the_ID(), 'application_email', $field['value']);
// Update field in database
update_field( 'field_123456', $field['value'] );
}
} else {
}
return $field;
}
);
Answer
Solution:
You can use like this, please update your code:
update_field( 'field_123456', $field['value'], {post_id} );
Please try this and let me know if you find any issues
Thank you.
Source