1,735 瀏覽數

WordPress – Child Theme

WordPress 佈景主題 (我用的是 Catch Box) 升級完成卻發生之前有修改過的檔案被刪除掉的問題.

但升級後這些設定都會不見,所以下次升級佈景主題前記得要先備份起來,要不然欲哭無淚.或是可以使用 Child Themes 來解決這個問題.

Child Themes 的做法也很簡單,目前我用的是 catch-box

  1. 建立一個新目錄 catach-box-child (WordPress 建議使用 -child 做為結尾)
    root@Benjr:~# cd /var/www/benjr/wp-content/themes/
    root@Benjr:/var/www/benjr/wp-content/themes# mkdir catch-box-child
    
  2. 在 新目錄 catach-box-child 建立 style.css ,檔案內容只需要下面幾行.

    root@Benjr:/var/www/benjr/wp-content/themes# cd catch-box-child/
    root@Benjr:/var/www/benjr/wp-content/themes/catch-box-child# vi style.css
    
    /*
     Theme Name:   Catch-Box Child
     Template:     catch-box
    */
    
    @import url("../catch-box/style.css");
    
    /* =Theme customization starts here
    -------------------------------------------------------------- *
    

    Theme Name:
    隨便取個名字
    Template:
    這個要注意一下不能隨便亂填,需要的是 Parent(父) theme 的名稱
    @import url
    這個則需要 Parent(父) theme 的路徑,因為在上一層,所以用 ../ 來指示.

  3. 接下來把你在 Parent(父) theme 有修改過的檔案都放置到 Child theme 這邊

    • single.php (在 WordPress 使用 Facebook 讚的連結,WordPress 固定網址設定)
      root@Benjr:/var/www/benjr/wp-content/themes/catch-box-child#cp  ../catch-box/single.php ./
      
    • languages/zh_tw.po 以及 languages/zh_tw.mo (WordPress 中文化) <-- 目前這個也不知道為什麼沒有生效.
    • functions.php
      functions.php 比較特別我們可以直接在新的 Child Theme 加入 php 的程式,不用複製原本 Parent(父) theme 的 functions.php 再來修改.不同其他設定檔,在子主題的 functions.php 文件不會覆蓋於父主題與其對應。

      下面是針對 Child Theme 的 languages 做修改 (參考官方網站 http://codex.wordpress.org/Child_Themes#Internationalization ),不過一樣有問題.

      root@Benjr:/var/www/benjr/wp-content/themes/catch-box-child#vi functions.php
      <?php
      /**
       * Setup My Child Theme's textdomain.
       *
       * Declare textdomain for this child theme.
       * Translations can be filed in the /languages/ directory.
       */
      function my_child_theme_setup() {
          load_child_theme_textdomain( 'catch-box', get_stylesheet_directory() . '/languages' );
      }
      add_action( 'after_setup_theme', 'my_child_theme_setup' );
      ?>
      

      程式碼主要只有兩行,我們來看看內容

      add_action( 'after_setup_theme', 'my_child_theme_setup' );
      

      add_action( $hook, $function_to_add, $priority, $accepted_args )

      • $hook
        The name of the action to which $function_to_add is hooked. (See Plugin API/Action Reference for a list of action hooks).
        第一個參數是 hook ,內容是 after_setup_theme
        在 wordpress 定義了 http://codex.wordpress.org/Plugin_API/Action_Reference 後面指令的程式碼使用時機,這邊所設定的是 after_setup_theme ,什麼是 after_setup_theme 呢!!
        Generally used to initialize theme settings/options. This is the first action hook available to themes, triggered immediately after the active theme’s functions.php file is loaded.
      • $function_to_add ,內容是 my_child_theme_setup 也就是你相對應的程式碼函數名稱.
      function my_child_theme_setup() {
      	load_child_theme_textdomain( 'catch-box', get_stylesheet_directory() . '/languages' );
      }
      

      my_child_theme_setup() 剛剛在 add_action , 所定義的函數庫名稱.

      load_child_theme_textdomain ( string $domain, string $path = false )
      就是載入 child theme 的 翻譯字串函數.
      其相對應的參數使用

      • $domain
        Parent theme 的名稱,我用的是 catch-box.
      • $path
        .mo 翻譯檔案的位置

2 個網友的想法 “WordPress – Child Theme

  1. 自動參照通知: WordPress 中文化 | Benjr.tw

發表迴響