Giữ nguyên cài đặt chủ đề trong chủ đề con


10

Khách hàng của tôi sử dụng chủ đề Karma với nhiều cài đặt trong tùy chọn chủ đề. Tôi cần giữ các bổ sung CSS và PHP của mình trong một chủ đề con để các bản cập nhật chủ đề không xóa sạch nó. Tuy nhiên, khi tôi chọn chủ đề con trong Giao diện> Chủ đề, các cài đặt chủ đề chính sẽ không còn nữa.

Có cách nào để duy trì các cài đặt chủ đề chính?


bạn có ý nghĩa gì trong "đi"? Nếu bạn có thể chuyển về chủ đề chính và cài đặt ở đó thì chúng sẽ không biến mất
Mark Kaplun

Đi từ bảng điều khiển và trang web, đó là. Chúng vẫn tồn tại ở đâu đó trong cơ sở dữ liệu nhưng điều đó không liên quan đến vấn đề của tôi.
Drainke035

vậy vấn đề của bạn là gì? bạn hỏi "Có cách nào để giữ các cài đặt chủ đề chính không?" và vì chúng vẫn còn trong DB nên chúng được bảo tồn
Mark Kaplun

"Bảo tồn" có nghĩa là hiện diện trong chủ đề trẻ em. Khi chuyển từ chủ đề gốc sang chủ đề con, tôi muốn cài đặt con giống với cài đặt gốc.
Drainke035

sau đó sao chép chúng. Phải thừa nhận tôi vẫn không hiểu chính xác vấn đề bạn đang cố gắng giải quyết là gì. Nghe có vẻ như bạn đang cố gắng làm phức tạp cuộc sống của bạn hoặc cách tiếp cận của bạn khi thực hiện một chủ đề con là sai và bạn nên sửa đổi chủ đề cha mẹ (hoặc có thể là chủ đề phụ không phù hợp để sử dụng cho các chủ đề con)
Mark Kaplun

Câu trả lời:


9

Do cách các cài đặt chủ đề này được lưu trữ dưới dạng một mảng trong cơ sở dữ liệu, nên có thể khó sao chép chúng chỉ bằng cách sao chép và dán trong phpmyadmin hoặc một số chiến thuật tương tự.

Các tùy chọn lệnh WP CLI là bạn của bạn ở đây. Nếu bạn chưa sử dụng WP CLI, hãy xem thử! Đây là cách tôi sao chép các cài đặt từ chủ đề cửa hàng sang một chủ đề được gọi là 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

Là dòng thứ hai, bạn nên sử dụng tùy chọn cập nhật tùy chọn đường ống wp theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor

Vâng, tôi cho rằng đó là một cách tiêu chuẩn hơn để làm điều đó ...
squarecandy

Xin chào squarecandy, bạn nói "có thể khó sao chép chúng chỉ bằng cách sao chép và dán", nhưng thao tác bạn thực hiện có vẻ như tôi cũng vậy. Tôi có lầm không?
Marco Panichi

@MarcoPanichi - nó hoàn toàn khác biệt bởi vì WP CLI thực hiện một loạt các công cụ ưa thích mà bạn không bao giờ thấy dữ liệu không được sắp xếp lại / tuần tự hóa theo cách thích hợp. Nếu bạn chỉ sao chép các giá trị và thử thay đổi mọi thứ trực tiếp trong cơ sở dữ liệu bằng các lệnh MySQL hoặc phpmyadmin, bạn có thể sẽ làm mọi thứ rối tung lên.
squarecandy

Tôi khá chắc chắn rằng với các lệnh của bạn nhận được [cập nhật] thành [từ] một tệp, bạn đang làm điều tương tự
Marco Panichi

5

Sửa đổi chủ đề Wordpress được lưu trong wp_optionsbảng cơ sở dữ liệu trong theme_mods_{themename}trường. Bạn có thể sao chép nó và đổi tên bằng tên chủ đề con của bạn.


1
Và khi chủ đề gốc cập nhật và thêm các tùy chọn mới, bạn sẽ làm gì sau đó?
Mark Kaplun

1
Lựa chọn tốt hơn @MarkKaplun là gì? Tôi nghĩ rằng điều này giải quyết vấn đề mà người dùng đang hỏi
Eoin

1
@ Tôi càng đọc nhiều câu hỏi về chủ đề trẻ em, tôi càng không thích những hạn chế của nó. Dường như đối với bất kỳ thay đổi không nhỏ trong chủ đề gốc, bạn sẽ phải đánh giá lại mã chủ đề con. Nếu tất cả những gì bạn làm là CSS, có rất ít vấn đề, nhưng đối với bất kỳ điều gì khác, việc đánh giá lại là cần thiết. OP ở đây sẽ cần đảm bảo anh ta đồng bộ các tùy chọn với chủ đề gốc trên mỗi lần nâng cấp (trong trường hợp một tùy chọn mới với giá trị mặc định không trống đã được thêm vào). Tôi thấy mình ủng hộ việc sử dụng các chủ đề con, và thay vào đó sử dụng git để phân nhánh "cha mẹ" và thực hiện hợp nhất khi có cập nhật.
Đánh dấu Kaplun

Khi bạn nói, đổi tên bằng tên của chủ đề con, ý bạn là tên cụ thể nào? Tôi không hiểu lấy tên chủ đề con từ đâu.

@fuddin tên chủ đề là tên của thư mục của chủ đề con; ví dụ: cài đặt chủ đề gốc được xác định bởi tùy chọn 'theme_mods_parent-theme-name'; cài đặt chủ đề con có thể được xác định bởi tùy chọn_name 'theme_mods_parent-theme-name-child'. Bạn có thể thực hiện lựa chọn trên cơ sở dữ liệu của mình để xem rõ điều đó:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi

0

Bạn có thể làm một cái gì đó giống như những gì chủ đề con Genesis bao gồm để lưu cài đặt chủ đề mặc định khi kích hoạt và chuyển đổi chủ đề:

//* 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',
        ) );

Rõ ràng bạn sẽ cần phải sửa đổi mã này để làm việc với chức năng chủ đề của bạn.


0

Tôi đã giải quyết bằng cách sao chép các tùy chọn trong cơ sở dữ liệu .

Dưới đây là quy trình từng bước :

  1. Đăng nhập vào phpMyAdmin của bạn và chọn cơ sở dữ liệu của webiste
  2. Sao lưu cơ sở dữ liệu
  3. Thực hiện truy vấn này để có cái nhìn rõ ràng về tình huống : SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"; hướng dẫn này sẽ trả về một hàng cho mọi chủ đề bạn đã kích hoạt trên trang web của bạn cho đến nay
  4. Sửa đổi hàng của cài đặt chủ đề gốc, được xác định bởi tùy chọn_name = theme_mods_parent-theme-name
  5. Ở đây, trong trường tùy chọn_value, bạn có tất cả các cài đặt chủ đề gốc ở dạng nối tiếp; sao chép chúng; bạn có thể sử dụng một công cụ unserialize để xem nội dung ở dạng thân thiện với con người
  6. Quay trở lại điểm 3, nhưng bây giờ sửa đổi hàng của cài đặt chủ đề con
  7. Dán các cài đặt bạn đã sao chép trước đó vào trường tùy chọn_value; tiết kiệm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.