WordPress Twenty Nineteen 子テーマ作成。カスタマイザーの 色 > アイキャッチ画像にメインカラーのフィルターを適用する のチェックをデフォルトで無しにする方法

スポンサードリンク


まとめ

  • add_action メソッドで、 customize_register を登録する。
  • 親テーマでも customize_register を登録しているので、これを打ち消す。

add_action メソッドで、 customize_register を登録する。

登録するメソッドの内容は、親テーマのカスタマイザー部分をベースに、ほぼそのまま使いました。メソッドコメントと、インデント文字と、今回変更したい部分のみ修正しています。ベースは Twenty Nineteen バージョン: 1.3 の twentynineteen/inc/customizer.php です。

以下のコードを、子テーマの functions.php へ追加しました。

/**
 * Add postMessage support for site title and description for the Theme Customizer.
 * 色 > アイキャッチ画像にメインカラーのフィルターを適用する のチェックなしをデフォルトにします。
 * 上記の以外は、 Twenty Nineteen をほぼそのまま上書きするもので、バージョンは以下です。
 * バージョン: 1.3
 *
 * @param WP_Customize_Manager $wp_customize Theme Customizer object.
 */
function child_twentynineteen_customize_register( $wp_customize ) {
  $wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
  $wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';
  $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';

  if ( isset( $wp_customize->selective_refresh ) ) {
    $wp_customize->selective_refresh->add_partial(
      'blogname',
      array(
        'selector'        => '.site-title a',
        'render_callback' => 'twentynineteen_customize_partial_blogname',
      )
    );
    $wp_customize->selective_refresh->add_partial(
      'blogdescription',
      array(
        'selector'        => '.site-description',
        'render_callback' => 'twentynineteen_customize_partial_blogdescription',
      )
    );
  }

  /**
   * Primary color.
   */
  $wp_customize->add_setting(
    'primary_color',
    array(
      'default'           => 'default',
      'transport'         => 'postMessage',
      'sanitize_callback' => 'twentynineteen_sanitize_color_option',
    )
  );

  $wp_customize->add_control(
    'primary_color',
    array(
      'type'     => 'radio',
      'label'    => __( 'Primary Color', 'twentynineteen' ),
      'choices'  => array(
        'default' => _x( 'Default', 'primary color', 'twentynineteen' ),
        'custom'  => _x( 'Custom', 'primary color', 'twentynineteen' ),
      ),
      'section'  => 'colors',
      'priority' => 5,
    )
  );

  // Add primary color hue setting and control.
  $wp_customize->add_setting(
    'primary_color_hue',
    array(
      'default'           => twentynineteen_get_default_hue(),
      'transport'         => 'postMessage',
      'sanitize_callback' => 'absint',
    )
  );

  $wp_customize->add_control(
    new WP_Customize_Color_Control(
      $wp_customize,
      'primary_color_hue',
      array(
        'description' => __( 'Apply a custom color for buttons, links, featured images, etc.', 'twentynineteen' ),
        'section'     => 'colors',
        'mode'        => 'hue',
      )
    )
  );

  // Add image filter setting and control.
  $wp_customize->add_setting(
    'image_filter',
    array(
      'default'           => 0,
      'sanitize_callback' => 'absint',
      'transport'         => 'postMessage',
    )
  );

  $wp_customize->add_control(
    'image_filter',
    array(
      'label'   => __( 'Apply a filter to featured images using the primary color', 'twentynineteen' ),
      'section' => 'colors',
      'type'    => 'checkbox',
    )
  );
}
add_action( 'customize_register', 'child_twentynineteen_customize_register' );

カスタマイザー部分を修正すれば良いことがわかるまでに、結構苦労しました。ウェブを検索しても情報がないのです><。

結局、 "アイキャッチ画像にメインカラーのフィルターを適用する" を検索してその原文が "Apply a filter to featured images using the primary color" であることを突き止め、この文字列で twentynineteen ディレクトリ配下を grep して特定することができました♪

親テーマでも customize_register を登録しているので、これを打ち消す。

さて、 functions.php にカスタマイザーのメソッドを追加しただけでは不十分です。WordPress では、子テーマの関数 -> 親テーマの関数の順に実行されます。

したがって、子テーマで customize_register にフックしたアクションは、親テーマの customize_register へのフック追加で上書きされてしまいます。

これは、次のページの情報で解決できました!

要約すると、次のようになります。

  1. 子テーマが起動完了後に動かすメソッド A を登録
  2. メソッド A では、
  3. 子テーマの customize_register にフックするメソッドを追加
  4. 親テーマの customize_register にフックするメソッドを削除

具体的には、次のようになりました。

/**
 * Add postMessage support for site title and description for the Theme Customizer.
 * 色 > アイキャッチ画像にメインカラーのフィルターを適用する のチェックなしをデフォルトにします。
 * 上記の以外は、 Twenty Nineteen をほぼそのまま上書きするもので、バージョンは以下です。
 * バージョン: 1.3
 *
 * @param WP_Customize_Manager $wp_customize Theme Customizer object.
 */
function child_twentynineteen_customize_register( $wp_customize ) {
... 略 ...
}

/**
 * 親テーマのアクションを子テーマのアクションに入れ替えます。
 */
function setup_after_parent_theme() {
  // 子テーマのアクションを追加し、親テーマのアクションを削除
  add_action( 'customize_register', 'child_twentynineteen_customize_register' );
  remove_action( 'customize_register', 'twentynineteen_customize_register' );
}
// 親テーマの後に実行
add_action( 'after_setup_theme', 'setup_after_parent_theme', 20 );

おわりに

このテーマを親に、子テーマを作成しています。子テーマづくりは年に 1 度、今回に至っては 2 年に 1 度のインターバルとなっています。

全て忘れています。

今回の話は、今までに遭遇したことのない話題のはずですので、ノートいたしました。

ちなみに、子テーマのリポジトリはこちらです。

以上です。

ディスカッションに参加

1件のコメント

コメントを残す

コメントを残す