在子主题中保留主题设置


10

我的客户使用Karma主题,并在主题选项中进行了许多设置。我需要将添加的CSS和PHP保留在子主题中,以便主题更新不会消失。但是,当我在“外观”>“主题”中选择子主题时,主要主题设置已全部消失。

有什么方法可以保留主要主题设置?


在“消失”中是什么意思?如果您可以切换回父主题并且设置在那里,那么它们就不会消失
Mark Kaplun 2014年

也就是说,从仪表板和网站消失了。尽管它们仍然存在于数据库中的某个位置,但这与我的问题无关。
drake035

那你怎么了 您问“有什么方法可以保留主要主题设置吗?” 并且由于它们仍在数据库中,因此被保留了
Mark Kaplun

“保留”的意思是存在于儿童主题中。从父主题切换到子主题时,我希望子设置与父设置相同。
drake035 2014年

然后复制它们。必须承认,我仍然不明白您要解决的问题到底是什么。听起来像是您试图使自己的生活复杂化,或者您做子主题的方法是错误的,并且您最好修改父主题(或者父主题可能不适合用于子主题)
Mark Kaplun

Answers:


10

由于这些主题设置以数组的形式存储在数据库中,因此仅通过将其复制并粘贴到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选项更新theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor,

是的,我想这是一种更标准的方式...
squarecandy

嗨,squarecandy,您说过“仅通过复制和粘贴就很难复制它们”,但是在我看来,您执行的操作是相同的。我错了吗?
Marco Panichi

@MarcoPanichi-绝对不同,因为WP CLI会执行很多奇特的工作,您永远不会看到以正确的方式对数据进行反序列化/重新序列化。如果仅复制值并尝试使用MySQL命令或phpmyadmin直接在数据库中更改内容,则可能会使事情搞砸。
squarecandy19年

我敢肯定,随着你的命令得到[更新]至[从]一个文件,你都在做同样的事情
马可Panichi

6

Wordpress主题修改保存wp_optionstheme_mods_{themename}字段的数据库表中。您可以复制它并使用子主题名称重命名。


1
当父主题更新并添加新选项时,您会怎么做?
马克·卡普伦

1
@MarkKaplun有什么更好的选择?我认为这解决了用户提出的问题
-Eoin

1
@Eoin我读到的有关儿童主题的问题越多,我越不喜欢它的局限性。似乎对于父主题的任何不重要的更改,您都必须重新评估子主题代码。如果您所要做的只是CSS,那么问题就不多了,但是对于其他任何事情,都需要重新评估。因此,此处的OP需要确保他在每次升级时都将选项与父主题同步(以防添加了具有非空默认值的新选项)。我发现自己反对使用子主题,而是使用git分支“父”并在有更新时进行合并。
马克·卡普伦

当您说出时,请使用子主题的名称进行重命名,这是什么意思?我不知道从何处获得儿童主题名称。

@fuddin主题名称是子主题的文件夹的名称;例如:父主题设置由option_name'theme_mods_parent-theme-name'标识;子主题设置可以通过option_name'theme_mods_parent-theme-name-child'来识别。您可以对数据库进行选择以清楚地查看它: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. 修改由option_name = theme_mods_parent-theme-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',
        ) );

显然,您需要修改此代码才能使用主题功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.