Збереження настройки теми в дитячій темі


10

Мій клієнт використовує Karma тему з безліччю налаштувань в опції теми. Мені потрібно зберегти свої CSS та PHP доповнення в дочірній темі, щоб оновлення тем не стирали його. Однак, коли я вибираю свою дочірню тему в розділі «Зовнішній вигляд»> «Теми», усі основні налаштування теми відпадають.

Чи є спосіб, щоб зберегти основні настройки теми?


що ти маєш на увазі в "пішов"? Якщо ви можете переключитися на батьківську тему, а налаштування є, вони не зникли
Марк Каплун

Віднесено від інформаційної панелі та веб-сайту, тобто. Вони все ще існують десь у базі даних, хоча це не стосується моєї проблеми.
drake035

так у чому ваша проблема? Ви запитали "Чи є можливість зберегти основні параметри теми?" а оскільки вони все ще знаходяться в БД, вони збереглися
Марк Каплун

"Збережене" значення, присутнє в дитячій темі. При переході від батьківської до дочірньої теми я хочу, щоб налаштування дитини були такими ж, як і налаштування батьків.
drake035

потім скопіюйте їх. Слід визнати, я все ще не розумію, що саме є проблемою, яку ви намагаєтеся вирішити. звучить так, як ви намагаєтесь ускладнити вам життя, або ваш підхід до того, щоб робити дитячу тему, неправильний, і вам краще змінити батьківську тему (або може бути, що батьківська тема не підходить для використання в дочірніх темах)
Марк Каплун

Відповіді:


11

Через те, як ці параметри теми зберігаються як масив у базі даних, їх може бути важко скопіювати, просто скопіювавши та вставивши в phpmyadmin або якусь подібну тактику.

Команда WP CLI варіант є вашим другом тут. Якщо ви вже не використовуєте WP CLI, перевірте це! Ось як я скопіював налаштування з теми вітрини на тему під назвою storefront-sqcdy-child:

# save the existing theme settings in json format in a temporary text file
wp option get theme_mods_storefront --format=json > theme_mods_storefront.txt

# load the saved settings into the child theme option record in the database
wp option update theme_mods_storefront-sqcdy-child --format=json < theme_mods_storefront.txt

# cleanup the temp file
rm -f theme_mods_storefront.txt

В якості другого рядка слід скористатись також опцією оновлення Wp-опції topic_mods_storefront-sqcdy-child --format = json <topic_mods_storefront.txt
Грегор

Так, я вважаю, що це більш стандартний спосіб зробити це ...
squarecandy

Привіт Squarecandy, ви сказали, що "може бути важко скопіювати їх просто копіювати та вставити", але операція, яку ви виконуєте, здається мені такою ж. Я помиляюся?
Марко Паничі

@MarcoPanichi - це, безумовно , відрізняється , тому що WP CLI робить купу фантазії речі , які ви ніколи не побачите десеріалізациі / повторних Серіалізация даних належним чином. Якщо ви просто скопіювати значення і спробувати змінити положення речей безпосередньо в базі даних з допомогою команд MySQL або PHPMyAdmin ви, ймовірно , накоїти.
squarecandy

1
Дивіться wpengine.com/support/wordpress-serialized-data - розділ "Потенційні конфлікти", чому ви не можете просто скопіювати серіалізоване значення і очікуєте, що він працює 100% часу. WP CLI піклується про все це за вас.
Squarecandy

6

Зміни теми Wordpress зберігаються в wp_optionsтаблиці бази даних у theme_mods_{themename}полі. Ви можете скопіювати його та перейменувати, використовуючи назву теми дитини.


1
І коли батьківська тема оновлюється та додає нові параметри, що робити тоді?
Марк Каплун

1
Що є кращим варіантом @MarkKaplun? Я думаю , що це вирішує проблему користувач запитує
Йон

1
@Eoin тим більше питань , які я прочитав про дитячій тематиці, тим менше мені подобаються обмеження його. Здається, що для будь-якої нетривіальної зміни батьківської теми вам доведеться переоцінювати код дочірньої теми. Якщо все, що ви робите, - це CSS, проблем існує мало, але для будь-чого іншого необхідна переоцінка. ОП тут потрібно буде переконатися, що він синхронізує параметри з батьківською темою для кожного оновлення (у випадку, якщо була додана нова опція з непорожнім значенням за замовчуванням). Я вважаю, що я виступаю проти використання дочірніх тем, а замість цього використовую git, щоб розгалужувати "батьківський" і робити злиття, коли є оновлення.
Марк Каплун

Коли ви говорите, перейменовувати , використовуючи ім'я дитини тему в те , що конкретне ім'я ви маєте в виду? Я не розумію, звідки взяти назву дитячої теми.

@fuddin назва теми - це назва папки дочірньої теми; наприклад: параметри батьківської теми ідентифікуються за допомогою імені параметра "ім'я теми_модуля_прозора"; Налаштування дочірньої теми може бути ідентифіковано за допомогою опції_імен 'тема_модуля_захисна тема-ім’я-дитина'. Ви можете виконати вибір у вашій базі даних, щоб чітко побачити це:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi

1

Я вирішив просто скопіювати параметри в базу даних .

Ось покрокова процедура :

  1. Увійдіть у свій phpMyAdmin та виберіть базу даних веб-системи
  2. Резервне копіювання бази даних
  3. Виконайте цей запит, щоб мати чітке уявлення про ситуацію SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; ця інструкція поверне рядок для кожної теми, яку ви активували на своєму веб-сайті досі
  4. Змініть рядок налаштувань батьківської теми, ідентифікованих за допомогою параметра_імен = topic_mods_parent-name-name
  5. Тут у полі option_value ви маєте всі параметри батьківської теми у серіалізованому вигляді; скопіюйте їх; ви можете використовувати несеріалізований інструмент , щоб побачити вміст у зручній для людини формі
  6. Поверніться до пункту 3, але тепер змініть рядок налаштувань дочірньої теми
  7. Вставте параметри, які ви скопіювали раніше, у поле option_value; зберегти

0

Ви можете зробити щось на кшталт того, що включає в себе дочірні теми Genesis, щоб зберегти налаштування теми за замовчуванням при активації та перемиканні тем:

//* Theme Setting Defaults
add_filter( 'genesis_theme_settings_defaults', 'child_theme_defaults' );
function child_theme_defaults( $defaults ) {

    $defaults['blog_cat_num']              = 6;
    $defaults['content_archive']           = 'full';
    $defaults['content_archive_limit']     = 150;
    $defaults['content_archive_thumbnail'] = 0;
    $defaults['image_alignment']           = '';
    $defaults['image_size']                = 'entry-image';
    $defaults['posts_nav']                 = 'prev-next';
    $defaults['site_layout']               = 'full-width-content';

    return $defaults;

}

//* Theme Setup
add_action( 'after_switch_theme', 'child_theme_setting_defaults' );
function child_theme_setting_defaults() {

    if( function_exists( 'genesis_update_settings' ) ) {

        genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

    } else {

        _genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

Зрозуміло, що вам потрібно буде змінити цей код, щоб він працював з вашими функціями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.