Как скрыть общедоступный пост, содержащий пользовательские поля плагина ACF

#php #wordpress

#php #wordpress

Вопрос:

У меня есть пост, в котором пользователь может изменять все тексты сайта в пользовательских полях, созданных с помощью плагина ACF. Дело в том, что я не хочу, чтобы этот пост вообще отображался ни на одной странице. Я попытался изменить его статус на закрытый, но из-за этого все тексты из пользовательских полей исчезают с веб-сайта. Как я могу отфильтровать только этот конкретный пост из всех списков сообщений? Есть ли какой-нибудь способ отфильтровать его в functions.php ?

РЕДАКТИРОВАТЬ: я использую версию PRO, на случай, если кому-то это интересно.

Ответ №1:

Почему вы хотите сохранить его all site texts in custom fields в посте? Вы могли бы лучше зарегистрировать страницу параметров и сохранить там все детали. Тогда вам не нужно скрывать никаких постов.

Зарегистрируйте страницу параметров acf:

 <?php
// Add main options page
acf_add_options_page( array(
    'page_title'     => __( 'Options', 'textdomain' ),
    'menu_title'     => __( 'Options', 'textdomain' ),
    'menu_slug'      => 'theme-options',
    'capability'     => 'manage_options',
    'position'       => 999
) );
add_filter('init', 'options_pages');
?>
  

Чтобы получить поля со страницы параметров, вам нужно передать параметр ‘option’ в get_field() или the_field() вот так:

 <?php echo get_field('your-field-name', 'option'); ?>
  

Вы можете прочитать больше о параметрах полей в документации ACF:
https://www.advancedcustomfields.com/add-ons/options-page
https://www.advancedcustomfields.com/resources/acf_add_options_page /

Комментарии:

1. Могу ли я сохранить текущий код страницы темы, содержимое которой поступает из функций have_rows(‘a_group’) и get_sub_field(‘field_from_a_group’)? Будет ли это по-прежнему работать?

2. Да, ваш существующий код все еще должен работать, просто не забудьте добавить параметр ‘option’ для извлекаемых полей options.

3. Я применил параметр ‘option’, но содержимое исчезло. Кроме того, строка add_filter(‘init’, ‘options_pages’) сгенерировала предупреждение: Предупреждение: call_user_func_array() ожидает, что параметр 1 будет допустимым обратным вызовом, функция ‘options_pages’ не найдена или недопустимое имя функции в /usr/local/var/www/wordpress/wp-includes/class-wp-hook . php в строке 286

4. Ошибка была в другой функции, куда я загружал части своей темы. Вставка параметра ‘option’ туда также исправила это сейчас. Кроме того, я удалил эту строку с add_filter, предупреждение прекратилось, и ничего плохого не произошло.