0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WordPress|固定ページや投稿ごとにCSSやJavaScriptを追加する方法

Last updated at Posted at 2022-07-22

本稿は、下記のページを踏襲する内容となります。

固定ページや投稿ごとにCSSやJavaScriptを追加する方法

テーマの:page_facing_up:functions.phpへ下記のコードを挿入してください(できれば子テーマを設けて、子テーマのfunctions.phpを触るようにしましょう)

functions.php カスタムウィジットのコード

// Custom CSS Widget
add_action( 'admin_menu', 'custom_css_hooks' );
add_action( 'save_post', 'save_custom_css' );
add_action( 'wp_head','insert_custom_css' );
function custom_css_hooks() {
  add_meta_box( 'custom_css', 'Custom CSS', 'custom_css_input', 'post', 'normal', 'high' );
  add_meta_box( 'custom_css', 'Custom CSS', 'custom_css_input', 'page', 'normal', 'high' );
}
function custom_css_input() {
  global $post;
  echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="'.wp_create_nonce('custom-css').'" />';
  echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_css',true).'</textarea>';
}
function save_custom_css($post_id) {
  if ( !wp_verify_nonce( $_POST['custom_css_noncename'], 'custom-css' ) ) return $post_id;
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE) return $post_id;
  $custom_css = $_POST['custom_css'];
  update_post_meta( $post_id, '_custom_css', $custom_css );
}
function insert_custom_css() {
  if ( is_page() || is_single() ) {
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      echo '<style type="text/css">' . get_post_meta(get_the_ID(), '_custom_css', true) . '</style>';
    endwhile; endif;
    rewind_posts();
  }
}
// END Custom CSS Widget

// Custom JS Widget
add_action( 'admin_menu', 'custom_js_hooks' );
add_action( 'save_post', 'save_custom_js' );
add_action( 'wp_head','insert_custom_js' );
function custom_js_hooks() {
  add_meta_box( 'custom_js', 'Custom JS', 'custom_js_input', 'post', 'normal', 'high' );
  add_meta_box( 'custom_js', 'Custom JS', 'custom_js_input', 'page', 'normal', 'high' );
}
function custom_js_input() {
  global $post;
  echo '<input type="hidden" name="custom_js_noncename" id="custom_js_noncename" value="'.wp_create_nonce('custom-js').'" />';
  echo '<textarea name="custom_js" id="custom_js" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_js',true).'</textarea>';
}
function save_custom_js($post_id) {
  if (!wp_verify_nonce($_POST['custom_js_noncename'], 'custom-js')) return $post_id;
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
  $custom_js = $_POST['custom_js'];
  update_post_meta($post_id, '_custom_js', $custom_js);
}
function insert_custom_js() {
  if ( is_page() || is_single() ) {
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      echo '<script type="text/javascript">' . get_post_meta(get_the_ID(), '_custom_js', true) . '</script>';
    endwhile; endif;
    rewind_posts();
  }
}

// END Custom JS Widget

コードを挿入後に、投稿(もしくは固定ページ)の編集画面にアクセスすると、テキストエディタの下部に Custom CSSCustom JS という枠が増えていると思います。

image.png

この枠へCSSおよびJSを入力すると、該当ページの<head>タグ内に入力した値が挿入されます。

image.png

<script type="text/javascript">type="text/javascript部分は、どこいった???)

子テーマの方に注意!メタボックスが表示されない

エディターの周囲にある項目(枠)をメタボックスというようです(右サイドエリアにあるカテゴリーとかタグとかアイキャッチ画像とかの枠もメタボックス)

今回に追加したメタボックス Custom CSSCustom JS が、「:page_facing_up:functions.phpへ追記したのに表示されない」という場合は、関数wp_enqueue_script()内で実行されていないか、ご確認ください(私はコレではまりました)

functions.php NGな方法

// NGな方法

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_style( 'child_style', get_stylesheet_directory_uri() .'/style.css', [] );
  
  ここにカスタムウィジットのコードを追記したらダメ

}

functions.php OKな方法

// OKな方法

  ここへカスタムウィジットのコードを追記する

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_style( 'child_style', get_stylesheet_directory_uri() .'/style.css', [] );
}

(似たようなこと?がココに...)

なお、子テーマのfunctions.phpは、親テーマのfunctions.phpより先に読み込まれるので、追加したメタボックスは、親テーマに含まれているメタボックスより上位に表示されます。

もし、親テーマのメタボックスの後に、子テーマのメタボックスを表示させたい場合は、アクションフックafter_setup_themeを利用するのが良いかもしれません...

functions.php 親テーマのメタボックスを先に表示

add_action('after_setup_theme', function() {

  ここへカスタムウィジットのコードを追記する

}

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_style( 'child_style', get_stylesheet_directory_uri() .'/style.css', [] );
}

参考サイト

勉強になったリスペクトな記事です。

メタボックスについて

アクションフックについて

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?