Wordpress - Как получить поле "Дополнительные пользовательские поля" из базы данных WordPress? - Qaru

Опубликовано: 12.04.2018

Я бросаю еще один вариант в микс. Я думаю, что существующие ответы хороши, но если вы не посмотрите на родительскую группу, вы никогда не получите надежный ключ поля, потому что имя поля может существовать в нескольких группах.

Например, скажем, у вас есть две настраиваемые группы: одна для книг типа post и одна для пользовательских фильмов типа post. Обе группы добавили поле под названием title.

В базе данных оба сохраняются с post_except = 'title' и post_type = 'acf-field'. Две записи с тем же post_except, поэтому любой запрос, полагающийся только на post_except, будет неправильным, подстановочным знаком или нет.

Любой запрос, полагающийся на почтовый идентификатор, тоже невелик, поскольку сообщение может не всегда существовать, чтобы пройти.

Поэтому вам нужно передать комбинацию поля и группы, чтобы получить ключ поля от имени. Этот снипп хорошо работает для меня:

if (! function_exists('acf_field_from_name')) { function acf_field_from_name($field, $group) { global $wpdb; return $wpdb->get_var($wpdb->prepare(" SELECT post.post_name as field_name FROM $wpdb->posts AS post LEFT JOIN $wpdb->posts AS parent ON post.post_parent = parent.id WHERE post.post_excerpt = %s AND post.post_type = 'acf-field' AND parent.post_excerpt = %s AND parent.post_type = 'acf-field-group' ", $field, $group)); } }

Вернет ключ поля из имени и группы, или null, если он не существует.

Использование:

acf_field_from_name('title', 'movie-fields'); // returns field_3333333333333 acf_field_from_name('title', 'book-fields'); // returns field_4444444444444 acf_field_from_name('plumbus', 'movie'); // returns null