Ответы пользователя по тегу WordPress
  • Есть ли возможность реализовать Repeater для Wordpress Customizer?

    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;
      }
    Ответ написан
    Комментировать