Intereting Posts
Каковы различия между WPINC и ABSPATH? Продолжайте получать уведомления об обновлениях, несмотря на то, что обновлять нечего Как я могу сделать переменную для meta_query? Возникли проблемы с привязкой к файлу с использованием относительного пути WordPress SSL (https) не работает с пользовательской постоянной ссылкой изменяет размеры изображений на лету Добавить «Параметры публикации» для нового сообщения WordPress Отображать имя и аватар автора в боковой панели сообщения Как перезагрузить панель управления после нажатия «Обновить» в «Быстрое редактирование»? Как добавить число столбцов категории в главном меню навигации Перенаправление при первом посещении Автоматически переходить на первую страницу в иерархии? Якорь только wp_nav_menu Невозможно поместить гиперссылку на изображение Featured Post Создание блога на моем новом веб-сайте с использованием WordPress, но у меня есть проблемы с боковой панелью

Получить полный список всех настраиваемых полей для всего блога

Итак, как и в названии, я хотел бы, чтобы одна функция получала сводный список всех настраиваемых полей, по всему сайту (все сообщения, страницы, CPT). Обычно я делаю это с помощью нескольких операторов SQL и жонглирую результаты, но мне было интересно, может ли кто-нибудь придумать более ориентированный на эту работу способ. В основном, однако, я хотел, чтобы что-то было доступно онлайн и было легко найти для кого-то другого, кто искал это.

Вот SQL, который я обычно использую:

SELECT DISTINCT `meta_key` FROM `prefix_postmeta` WHERE `meta_key` NOT LIKE "\_%" 

Вот функция, чтобы вытащить пользовательские поля одной страницы или сообщения:

 $custom_fields = get_post_custom($post->ID); foreach ( $custom_fields as $field_key => $field_values ) { if ( ! isset( $field_values[0] ) ) continue; if ( in_array( $field_key, array( "_edit_lock", "_edit_last" ) ) ) continue; echo $field_key . '=>' . $field_values[0]; } 

Таким образом, в основном, я хотел бы использовать одноразовую функцию, которую я могу использовать в functions.php и вызывать, когда мне нужен обновленный список вырезать / вставить все мои настраиваемые поля для плагина, который заставит вас перечислить их все вручную – Broken Link Checker, например.

В приведенной ниже функции будет храниться отдельный список всех настраиваемых полей для списка сообщений / страниц / пользовательских сообщений, которые передаются ему в ключах $customfields . Значения массива – это количество сообщений с соответствующим полем. В этом примере пользовательские поля, добавленные плагинами, исключаются ( $value[0] != '_'; ), Но их можно легко добавить обратно.

 function all_custom_fields($allposts) { foreach ( $allposts as $post ) : setup_postdata($post); $post_id = $post->ID; $fields = get_post_custom_keys($post_id); // all keys for post as values of array if ($fields) { foreach ($fields as $key => $value) { if ($value[0] != '_') { // exclude where added by plugin $customfields[$value] = isset($customfields[$value]) ? $customfields[$value] + 1 : 1; } } } endforeach; wp_reset_postdata(); return $customfields; } // example - all post types, whether published or not $args = array( 'post_status' => array('publish','draft','pending','future'), 'post_type' => 'any', 'posts_per_page' => -1, ); $allposts = get_posts($args); $customfields = all_custom_fields($allposts);