kryamk
@kryamk

Почему не работает дочерняя тема с кастомайзером в купленной теме?

Значится есть на сайте иконки соц. сетей, а в админке настройки урлов. для них. Вот пытаюсь добавить ещё одну соц.иконку. Вот полез в темный лес файлов темы (для меня темный, для кого-то - ясная полянка). Распутав эти цепочки файлов-классов нашел нужные: customizer.php data-trait.php и customizer-defaults.php. Добавляю по аналогии в них ещё одну соц.иконку и всё работает!
Но, я так понимаю, правильно дорабатывать темы используя дочернию, поэтому скопировал файлы. Всякие хедеры в дочерней работают, а вот вроде таких файлов: data-trait.php и customizer-defaults.php - вордпрес всё равно из родительской подхватывает.
Направьте, плиз, на путь истинный:
1. Норм делать без дочерней, сразу в родительской? Отключить обновления темы, хотя конечно если найдётся какая-нибудь дыра в безопасности, или это маловероятно?
2. Как вообще дорабатываются темы с дочерней? Не простые изменения шаблонов какого-нибудь single.php а вот таких настроек темы и прочего. Не найдётся примера глянуть? ))
3. Как у вас получается себя остановить, когда ни хрена не получаешься и засиживаешься до поздна за компом, например создавая вопрос на хабре три часа?

Вот ссылка на тему, или простыня ниже, где указал код из различных файлов:
spoiler

<?php /*** FILE header-4.php ***/
namespace radiustheme\roofix;
$rdtheme_socials = Helper::socials(); 
?>
<?php foreach ( $rdtheme_socials as $rdtheme_social ): ?>
    <a target="_blank" href="<?php echo esc_url( $rdtheme_social['url'] );?>">
        <i class="fab <?php echo esc_attr( $rdtheme_social['icon'] );?>"></i>
    </a>
<?php endforeach; ?>


<?php /*** FILE includes.php ***/
namespace radiustheme\roofix;
require_once ROOFIX_THEME_INC_DIR . 'helper-traits/data-trait.php';
require_once ROOFIX_THEME_INC_DIR . 'helper.php';
?>


<?php /*** FILE helper.php ***/
namespace radiustheme\roofix;
use radiustheme\roofix\DataTrait;
class Helper {
  use DataTrait;
}
?>


<?php /*** FILE data-trait.php ***/
namespace radiustheme\roofix;
trait DataTrait {
  public static function socials(){
    $rdtheme_socials = array(
      'social_facebook' => array(
        'icon' => 'fa-facebook-f',
        'url'  => RDTheme::$options['social_facebook'],
      ),
      'social_twitter' => array(
        'icon' => 'fa-twitter',
        'url'  => RDTheme::$options['social_twitter'],
      ),
    );
    return array_filter( $rdtheme_socials, array( __CLASS__ , 'filter_social' ) );
  }

  public static function filter_social( $args ){
    return ( $args['url'] != '' );
  }
}
?>


<?php /*** FILE rdtheme.php ***/
namespace radiustheme\roofix;
if (!class_exists(NS . 'RDTheme')) {
    class RDTheme
    {
        protected static $instance = null;
        // Sitewide static variables
        public static $options = null;
        private function __construct()
        {
            add_action('after_setup_theme', array($this, 'set_options'));
            add_action('customize_preview_init', array($this, 'set_options'));
        }

        public static function instance()
        {
            if (null == self::$instance) {
                self::$instance = new self;
            }
            return self::$instance;
        }

        public function set_options()
        {
            $defaults  = rttheme_generate_defaults();
            $newData = [];
            foreach ($defaults as $key => $dValue) {
                $value = get_theme_mod($key, $defaults[$key]);
                $newData[$key] = $value;
            }
            self::$options  = $newData;
        }

    }
}
RDTheme::instance();
?>


<?php /*** FILE customizer-defaults.php ***/
if (!function_exists('rttheme_generate_defaults')) {
    function rttheme_generate_defaults() {
        $customizer_defaults = array(
            'social_facebook'     => '#',
            'social_twitter'      => '#',
        );
        return apply_filters('rttheme_customizer_defaults', $customizer_defaults);
    }
}
?>


<?php /*** FILE customizer.php ***/
use radiustheme\roofix\Helper;
class rttheme_initialise_customizer_settings {
    private $defaults;

    public function __construct() {
        $this->defaults = rttheme_generate_defaults();
        add_action('customize_register', array($this, 'rttheme_register_contact_socials_controls'));
    }

    public function rttheme_register_contact_socials_controls($wp_customize) {
        $wp_customize->add_setting('social_facebook',
            array(
                'default'           => $this->defaults['social_facebook'],
                'transport'         => 'refresh',
                'sanitize_callback' => 'esc_url_raw'
            )
        );
        $wp_customize->add_control('social_facebook',
            array(
                'label'   => esc_html__('Facebook', 'roofix'),
                'section' => 'contact_socials_section',
                'type'    => 'url'
            )
        );

        $wp_customize->add_setting('social_twitter',
            array(
                'default'           => $this->defaults['social_twitter'],
                'transport'         => 'refresh',
                'sanitize_callback' => 'esc_url_raw'
            )
        );
        $wp_customize->add_control('social_twitter',
            array(
                'label'   => esc_html__('Twitter', 'roofix'),
                'section' => 'contact_socials_section',
                'type'    => 'url'
            )
        );
    }
}
if (class_exists('WP_Customize_Control')) {
    $rttheme_settings = new rttheme_initialise_customizer_settings();
}
 ?>

  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vss1502
в дочерней теме нужно сохранять иерархию пути к файлу. То есть - если файл лежит в корне темы, то в дочерней теме, его тоже нужно ложить в корень (например header.php). А если файл лежит в какой-либо папке, то и в дочерней теме нужно эту папку создать, а потом влажить в нее этот файл .
Как пример inc/customizer/customizer-defaults.php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы