dealenx
@dealenx
Аспирант, фрилансер

Есть ли возможность реализовать Repeater для Wordpress Customizer?

Здравствуйте, задался вопросом, если ли возможность добавлять модификатор в виду списка.

Например, необходимо вносить информацию о филиалах: контакты, город, ссылки и прочее.

Я понимаю, что подобное можно реализовать и через ACF, но ACF я обычно стараюсь использовать для записей или страниц, а не для всего сайта.
  • Вопрос задан
  • 158 просмотров
Решения вопроса 2
dealenx
@dealenx Автор вопроса
Аспирант, фрилансер
Продолжение ответа yarovikov :

В целом решение в репозитории рабочее (https://github.com/cristian-ungureanu/customizer-r...), но есть одно но, что надо в исходном коде дополнительно дописывать поля, потому что они названы одним именем, и чтобы изменить имя поля, то надо менять в исходниках. Простой пример.

Переходим в корень темы и клонируем исходники:

git clone https://github.com/cristian-ungureanu/customizer-repeater


Далее создаем файл \inc\customizer\init.php со следующим содержимым:
<?php
function true_customizer_init( $wp_customize ) {

	$wp_customize->add_section( 'departments', array(
		'title'          => 'Отделы',
		'priority'       => 50,
	) );

	$wp_customize->add_setting( 'customizer_repeater_department_list', array(
		'sanitize_callback' => 'customizer_repeater_sanitize',
	 ));

		$wp_customize->add_control( new Customizer_Repeater( $wp_customize, 'customizer_repeater_department_list', array(
	'label'   => esc_html__('Отдел','customizer-repeater'),
	'section' => 'departments',
	'priority' => 1,
	'customizer_repeater_title_control' => true,
	) ) );
}

add_action( 'customize_register', 'true_customizer_init' );


Подключаем в файле `functions.php` customizer-repeater и файл `\inc\customizer\init.php`:

<?php
require get_template_directory() . '/customizer-repeater/functions.php';
require get_template_directory() . '/inc/customizer/init.php';
...


В настройках темы необходимо проверить, что всё работает:
61f011d59b1a4107478426.png

Можно вывести список:
$customizer_repeater_department_list = get_theme_mod('customizer_repeater_department_list', json_encode( array(/*The content from your default parameter or delete this argument if you don't want a default*/)) );
  /*This returns a json so we have to decode it*/
  $customizer_repeater_department_list_decoded = json_decode($customizer_repeater_department_list);
  foreach($customizer_repeater_department_list_decoded as $repeater_item){
      echo $repeater_item->title;
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы