子テーマのテーマ設定を保持する


10

私のクライアントは、テーマオプションの多くの設定でKarmaテーマを使用しています。CSSとPHPの追加を子テーマに保持して、テーマの更新によって完全に消去されないようにする必要があります。しかし、[外観]> [テーマ]で子テーマを選択すると、メインのテーマ設定がすべて消えてしまいます。

メインのテーマ設定を保持する方法はありますか?


「なくなった」とはどういう意味ですか?親テーマに切り替えることができ、設定がそこにある場合、それらは消えません
Mark Kaplun

つまり、ダッシュボードとウェブサイトから消えました。それらはまだデータベースのどこかに存在しますが、それは私の問題には関係ありません。
drake035 2014年

だからあなたの問題は何ですか?「メインのテーマ設定を保持する方法はありますか?」そして、それらはまだDBにあるため、保存されます
マークカプルン2014年

「保存された」という意味は、子のテーマに存在します。親テーマから子テーマに切り替えるとき、子設定を親設定と同じにしたい。
drake035 2014年

次にそれらをコピーします。あなたが解決しようとしている問題が正確に何なのかまだわからないことを認めなければなりません。人生を複雑にしようとしているように聞こえる、または子テーマを実行するアプローチが間違っていて、親テーマを変更した方がよい(または親テーマが子テーマに使用するのに適していない可能性がある)
Mark Kaplun

回答:


9

これらのテーマ設定がデータベースに配列として保存される方法のため、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

2行目として、pipe too wpオプションを使用する必要がありますupdate theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor

はい、それがより標準的な方法だと思います...
squarecandy

こんにちは、squarecandyさん、「コピーして貼り付けるだけではコピーするのが難しい」とおっしゃっていましたが、操作は同じようです。私が間違っている?
Marco Panichi、

@MarcoPanichi-WP CLIは、データの適切な方法でデータのシリアル化解除/再シリアル化を行うことは決してない、さまざまな機能を実行するため、明らかに異なります。値をコピーして、MySQLコマンドまたはphpmyadminを使用してデータベースで直接変更しようとすると、おそらく混乱するでしょう。
squarecandy

あなたのコマンドがファイルから[から]に[更新]することで、あなたは同じことをしていると確信しています
Marco Panichi

6

Wordpressテーマの変更はwp_optionstheme_mods_{themename}フィールドのデータベーステーブルに保存されます。それをコピーして、子テーマ名を使用して名前を変更できます。


1
そして、親テーマが更新されて新しいオプションが追加されたら、どうしますか?
Mark Kaplun、2015年

1
@MarkKaplunより良いオプションは何ですか?これはユーザーが求めている問題を解決すると思います
Eoin

1
@Eoin私が子供のテーマについて読む質問が多ければ多いほど、私はそれの制限が好きではなくなります。親テーマに重要な変更を加えた場合は、子テーマコードを再評価する必要があるようです。CSSを使用するだけであれば問題はほとんどありませんが、それ以外の場合は再評価が必要です。ここでOPは、アップグレードのたびにオプションを親テーマと同期させる必要があります(空でないデフォルト値の新しいオプションが追加された場合)。私は子テーマの使用に反対しているのを見つけ、代わりにgitを使用して「親」を分岐し、更新があるとマージを行います。
マークカプルン2017年

子テーマの名前を使用して名前を変更すると、具体的な名前は何を意味しますか?子のテーマ名をどこから取得するのかわかりません。

@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_%"
マルコパニーチ

1

データベースのオプションをコピーするだけで解決しました

ここにあるステップバイステップの手順

  1. phpMyAdminにログインし、webisteのデータベースを選択します
  2. データベースをバックアップする
  3. 状況を明確に把握するには、次のクエリを実行しますSELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"。この指示により、これまでにWebサイトでアクティブにしたすべてのテーマの行が返されます
  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',
        ) );

明らかに、テーマの機能を使用するには、このコードを変更する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.