Home › Forums › Backend Issues (wp-admin) › get_field() – strange behaviour
Hi there,
we are experiencing a very strange behaviour with get_field() method.
In our development environment (PHP 7.0.3) we wrote this hook to solve an issue with WPML
function mlt_wpml_fix_galleries($post_id, $post, $update)
{
global $sitepress;
$post_type = get_post_type($post_id);
$current_language = $sitepress->get_current_language();
$languages = apply_filters( 'wpml_active_languages', null, null );
$field_name = 'gallery-images';
foreach ($languages as $lang => $lang_info) {
$translated_post_id = apply_filters('wpml_object_id', $post_id, 'photogallery', false, $lang);
if ('photogallery' == $post_type && $translated_post_id && $lang != $current_language) {
$values = get_field($field_name, $post_id, false);
if ($values) {
$updated_ids = [];
foreach ($values as $value) {
$updated_ids[] = apply_filters('wpml_object_id', $value, 'attachment', true, $lang);
}
update_field($field_name, $updated_ids, $translated_post_id);
}
}
}
}
add_action( 'save_post', __NAMESPACE__ . '\\mlt_wpml_fix_galleries', PHP_INT_MAX, 3 );
It works.
We did deploy that code on our production environment (PHP 7.1.1) and… get_field() returns false (boolean). We have same code, some database, same plugins, etc… We now solved using:
$values = get_post_meta($post_id, $field_name, true);
but I am not able to understand what’s happened.
Anyone could help?
My best
If you are trying to get the images from the translated post, shouldn’t your get_field() call look something like this
$values = get_field($field_name, $translated_post_id, false);
Hi @hube2,
thank you for your reply. I know my english is orrible, I am sorry. Try to better explain myself.
In our local environment (same db as production, same code (GIT), same plugin, etc…):
$values = get_field($field_name, $post_id, false);
it works. It returns an array. On our production it returns false
WTF.
PHP version is just the one difference beetwen environment.
For your information:
$post_id is the current language POST ID, so it is right. We are getting values from the current POST ID and copy it to the translated posts, because we want the same exactly gallery, even if user upload photos to german version (for example) and not into english version.
Best regards
Is it not getting the values or not updating the values to the translated post?
@hube2 is it not getting the values. get_field()
returns FALSE instead of an array.
Once again, I solved the issue using the native function get_post_meta()
, but it is a little bit strange behaviour.
I can’t really give you a better way to debug because I cannot recreate the issue that you’re seeing.
Is get_field() returning and empty array, false
or NULL
, there is a difference. false
could mean that the field/data exists but is empty, although I would expect it to be returning an empty array. NULL
would mean that the value/data does not exist (is not present in the database) for the post.
Thank you @hube2, as I wrote in my previous posts, get_field()
returns FALSE
, just in our production environment with PHP 7.1.x
Like I said, if there is not value in the database then the value returned should be NULL
. Since it’s returning false, then there is a value in the database.
The value is stored as a serialized array. The only reason that a field stored as a serialized array would return false is that the string is not unserializeable, see this http://php.net/manual/en/function.unserialize.php.
What this means is one of 2 things
@hube2 I think you’re totally right:
7.1.0 The allowed_classes element of options) is now strictly typed, i.e. if anything other than an array or a boolean is given, unserialize() returns FALSE and issues an E_WARNING.
ACF calls maybe_unserialize after getting the value. It seems that this could be a problem with WP compatibility with PHP 7.1
The topic ‘get_field() – strange behaviour’ is closed to new replies.
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.