<?php //WordPressのセッティング
/**
* Cocoon WordPress Theme
* @author: yhira
* @link: https://wp-cocoon.com/
* @license: http://www.gnu.org/licenses/gpl-2.0.html GPL v2 or later
*/
if ( !defined( 'ABSPATH' ) ) exit;
//ERR_BLOCKED_BY_XSS_AUDITOR エラー対策
if (is_admin_php_page()) {
header('X-XSS-Protection: 0');
}
// //フィード用のヘッダー出力
// if (is_feed()) {
// header('Content-type: application/rss+xml');
// }
// アイキャッチ画像を有効化
add_theme_support('post-thumbnails');
///////////////////////////////////////////
// サムネイルサイズ
///////////////////////////////////////////
//150px正方形 ページ送りナビ、Facebookバルーン、管理画面投稿一覧サムネイル
define('W150', 150);
define('THUMB150', 'thumb150');
define('THUMB150WIDTH', get_square_thumbnail_width(W150));
define('THUMB150HEIGHT', get_square_thumbnail_height(THUMB150WIDTH));
add_image_size(THUMB150, THUMB150WIDTH, THUMB150HEIGHT, true);
define('THUMB150WIDTH_DEF', W150);
define('THUMB150HEIGHT_DEF', W150);
//120px 新着・人気記事ウィジェット・ページ送りナビ・関連記事ミニカード
define('W120', 120);
define('THUMB120', 'thumb120');
define('THUMB120WIDTH', get_thumbnail_width(W120));
define('THUMB120HEIGHT', get_thumbnail_height(THUMB120WIDTH));
add_image_size(THUMB120, THUMB120WIDTH, THUMB120HEIGHT, true);
define('THUMB120WIDTH_DEF', W120);
define('THUMB120HEIGHT_DEF', get_thumbnail_height(THUMB120WIDTH_DEF));
//160px 関連記事デフォルト・関連記事4列
define('W160', 160);
define('THUMB160', 'thumb160');
define('THUMB160WIDTH', get_thumbnail_width(W160));
define('THUMB160HEIGHT', get_thumbnail_height(THUMB160WIDTH));
add_image_size(THUMB160, THUMB160WIDTH, THUMB160HEIGHT, true);
define('THUMB160WIDTH_DEF', W160);
define('THUMB160HEIGHT_DEF', get_thumbnail_height(THUMB160WIDTH_DEF));
//320px デフォルトサムネイル・関連記事3列
define('W320', 320);
define('THUMB320', 'thumb320');
define('THUMB320WIDTH', get_thumbnail_width(W320));
define('THUMB320HEIGHT', get_thumbnail_height(THUMB320WIDTH));
add_image_size(THUMB320, THUMB320WIDTH, THUMB320HEIGHT, true);
define('THUMB320WIDTH_DEF', W320);
define('THUMB320HEIGHT_DEF', get_thumbnail_height(THUMB320WIDTH_DEF));
//大きなNO IMAGEサムネイルサイズ
define('THUMB_LARGE_NO_IMAGE_WIDTH', 800);
define('THUMB_LARGE_NO_IMAGE_HEIGHT', 451);
//縦型カード2列用の可変サムネイル
if (is_entry_card_type_vertical_card_2()) {
add_image_size(get_vertical_card_2_thumbnail_size(), get_vertical_card_2_width(), get_vertical_card_2_height(), true);
}
//縦型カード3列用の可変サムネイル
if (is_entry_card_type_vertical_card_3()) {
add_image_size(get_vertical_card_3_thumbnail_size(), get_vertical_card_3_width(), get_vertical_card_3_height(), true);
}
//タイルカード2列用の可変サムネイル
if (is_entry_card_type_tile_card_2()) {
add_image_size(get_tile_card_2_thumbnail_size(), get_tile_card_2_width(), get_tile_card_2_height(), false);
}
//タイルカード3列用の可変サムネイル
if (is_entry_card_type_tile_card_3()) {
add_image_size(get_tile_card_3_thumbnail_size(), get_tile_card_3_width(), get_tile_card_3_height(), false);
}
//コンテンツの幅の指定
if ( ! isset( $content_width ) ) $content_width = get_site_wrap_width();
//カテゴリー説明文でHTMLタグを使う
remove_filter( 'pre_term_description', 'wp_filter_kses' );
///////////////////////////////////////
// ビジュアルエディターのCSSの読み込み順を変更する
///////////////////////////////////////
add_filter( 'editor_stylesheets', 'visual_editor_stylesheets_custom');
if ( !function_exists( 'visual_editor_stylesheets_custom' ) ):
function visual_editor_stylesheets_custom($stylesheets) {
//ビジュアルエディタースタイルが有効な時
if (is_visual_editor_style_enable()) {
$style_url = PARENT_THEME_STYLE_CSS_URL;
$keyframes_url = PARENT_THEME_KEYFRAMES_CSS_URL;
$css = get_block_editor_color_palette_css();
$file = get_visual_color_palette_css_cache_file();
$color_file_url = get_visual_color_palette_css_cache_url();
wp_filesystem_put_contents($file, $css);
array_push($stylesheets,
add_file_ver_to_css_js($style_url),
add_file_ver_to_css_js($keyframes_url),
add_file_ver_to_css_js($color_file_url)
);
//親テーマを選択している場合もしくはブロックエディターの時editor-style.cssを読み込む
if (!is_child_theme() || use_gutenberg_editor()) {
$editor_style_url = get_cocoon_template_directory_uri().'/editor-style.css';
array_push($stylesheets,
add_file_ver_to_css_js($editor_style_url),
);
}
// アイコンフォントURL: ブロックエディター経由の呼び出し時(gutenberg_editor_settings())
// では use_gutenberg_editor() が常に true を返すためスキップされる。
// ブロックエディターではアイコンフォントは gutenberg_stylesheets_custom() 内の
// wp_enqueue_style_icomoon() で別途読み込まれるため、二重読み込み防止として正しい動作。
if (!use_gutenberg_editor()) {
array_push($stylesheets,
add_file_ver_to_css_js(get_site_icon_font_url())
);
}
//Font Awesome5が有効な場合
if (is_site_icon_font_font_awesome_5()) {
array_push($stylesheets,
add_file_ver_to_css_js(FONT_AWESOME_5_UPDATE_URL)
);
}
//スキンが設定されている場合
if (get_skin_url() &&
//エディター除外スキンの場合
!is_exclude_skin(get_skin_url(), get_editor_exclude_skins())) {
array_push($stylesheets,
add_file_ver_to_css_js(get_skin_url())
);
}
//カスタムスタイル
$cache_file_url = get_theme_css_cache_file_url();
array_push($stylesheets,
add_file_ver_to_css_js($cache_file_url)
);
//子テーマがある場合、子テーマ内のスタイルも読み込む
if (is_child_theme()) {
array_push($stylesheets,
add_file_ver_to_css_js(CHILD_THEME_STYLE_CSS_URL),
);
}
//ブロックエディターの時editor-style.cssを読み込む
if (is_child_theme() && use_gutenberg_editor()) {
array_push($stylesheets,
add_file_ver_to_css_js(get_cocoon_stylesheet_directory_uri().'/editor-style.css')
);
}
// fontの指定がgoogle fontの場合
if ( ! is_site_font_family_local() ) {
array_push($stylesheets,
add_file_ver_to_css_js( get_site_font_source_url() ),
);
}
}
return $stylesheets;
}
endif;
// add_editor_style( 'style.css' );
///////////////////////////////////////
// GutenbergのCSSの読み込み順を変更する
///////////////////////////////////////
add_action( 'enqueue_block_assets', 'gutenberg_stylesheets_custom' );
if ( !function_exists( 'gutenberg_stylesheets_custom' ) ):
function gutenberg_stylesheets_custom() {
if ( is_visual_editor_style_enable() && is_admin() ) {
// --- WP 7.0 iframe 対応: エディター内クラス付与スクリプト ---
// jQuery に依存しない vanilla JS として enqueue_block_assets 経由で読み込む。
// WP 6.3+ では iframe 内でも実行される。WP < 6.3 では外側で実行される。
// スクリプトファイルのパスを変数に保持する(filemtime でバージョン管理するため)
$editor_classes_js = '/js/gutenberg-editor-classes.js';
$editor_classes_js_path = get_cocoon_template_directory() . $editor_classes_js;
wp_enqueue_script(
THEME_NAME . '-gutenberg-editor-classes',
get_cocoon_template_directory_uri() . $editor_classes_js,
array(), // jQuery 不要
// ファイルが存在しない場合は false(WP バージョン)にフォールバックして Warning を防ぐ
file_exists( $editor_classes_js_path ) ? filemtime( $editor_classes_js_path ) : false,
true
);
// エディタールート要素に付与するクラスを構築する
$editor_add_classes = array( 'cocoon-block-wrap', 'body', 'article', 'admin-page' );
$site_icon_font = get_site_icon_font_class();
if ( $site_icon_font ) {
$editor_add_classes[] = str_replace( ' ', '', $site_icon_font );
}
$page_type_class = get_editor_page_type_class();
if ( $page_type_class ) {
$editor_add_classes[] = str_replace( ' ', '', $page_type_class );
}
// iframe body に付与するフォント関連クラスを構築する
// (iframe 内で body に直接付与することで、CSS の親子セレクタが同一 document 内で機能する)
// 値が空プレフィックスのみ(例: 'ff-')の場合は除外して、不要なクラス付与を防ぐ
$editor_font_classes = array();
$font_family_class = get_site_font_family_class();
$font_size_class = get_site_font_size_class();
$font_weight_class = get_site_font_weight_class();
if ( $font_family_class && $font_family_class !== 'ff-' ) {
$editor_font_classes[] = 'wp-admin-' . $font_family_class;
}
if ( $font_size_class && $font_size_class !== 'fz-' ) {
$editor_font_classes[] = 'wp-admin-' . $font_size_class;
}
if ( $font_weight_class && $font_weight_class !== 'fw-' ) {
$editor_font_classes[] = 'wp-admin-' . $font_weight_class;
}
// wp_localize_script は iframe 内で動作しない場合があるため、
// wp_add_inline_script でスクリプト実行前にグローバル変数として注入する
wp_add_inline_script(
THEME_NAME . '-gutenberg-editor-classes',
sprintf(
'window.cocoonEditorClassConfig = %s;',
// JSON_HEX_TAG で <> をエスケープし、<script> タグ内への出力時の XSS を防御
wp_json_encode( array(
'addClasses' => $editor_add_classes,
'fontClasses' => $editor_font_classes,
), JSON_HEX_TAG )
),
'before'
);
// Gutenberg エディター用 CSS を読み込む
// (silk スキンの wp_add_inline_style が cocoon-gutenberg ハンドルを参照しているため変更しない)
wp_enqueue_style( THEME_NAME . '-gutenberg', get_cocoon_template_directory_uri() . '/css/gutenberg-editor.css' );
// IcoMoonを読み込む
wp_enqueue_style_icomoon();
//WordPressバージョンが5.8以上の時
if (is_wp_5_8_or_over()) {
//Font Awesome5が有効な場合(外部 CDN のため常に wp_enqueue_style で読み込む)
if (is_site_icon_font_font_awesome_5()) {
wp_enqueue_style( THEME_NAME . '-font-awesome-5-style', FONT_AWESOME_5_UPDATE_URL );
}
// カラーパレットCSSキャッシュファイルを常に最新状態に保つ
// (ブロックエディタ/クラシックエディタ問わず生成しておく)
$css = get_block_editor_color_palette_css();
$file = get_block_color_palette_css_cache_file();
wp_filesystem_put_contents($file, $css, 0);
// ブロックエディタ画面でも管理画面 DOM 側(iframe 外)に <link> タグで CSS を
// 読み込む。これは右サイドバーのブロックスタイルプレビュー領域が iframe 外
// で描画されるため、$editor_settings['styles'] 注入だけでは届かないため必要。
// エディタ本体 iframe には gutenberg_editor_settings() が同じ CSS を注入する
// ため二重適用となるが、CSS は冪等のため視覚的な不具合は発生しない。
//カラーパレットスタイル
wp_enqueue_style( THEME_NAME . '-color-palette-style', get_block_color_palette_css_cache_url() );
//スキンが設定されている場合
if (get_skin_url() &&
//エディター除外スキンの場合
!is_exclude_skin(get_skin_url(), get_editor_exclude_skins())) {
wp_enqueue_style( THEME_NAME . '-skin-style', get_skin_url() );
}
//カスタムスタイル
$cache_file_url = get_theme_css_cache_file_url();
wp_enqueue_style( THEME_NAME . '-css-cache-style', $cache_file_url );
//子テーマがある場合
if (is_child_theme()) {
wp_enqueue_style( THEME_NAME . '-child-style', CHILD_THEME_STYLE_CSS_URL );
}
}
/**
* Filters the script parameter name.
*
* @since 1.4.8
*/
$name = apply_filters( 'cocoon_gutenberg_param_name', 'cocoon_gutenberg_params' );
/**
* Filters the script parameter value.
*
* @since 1.4.8
*
* @param array $params Default parameter.
*/
$value = apply_filters( 'cocoon_gutenberg_param_value', array(
'background' => true,
'title' => false,
) );
// フックを維持しつつ、新しい JS ハンドルに付け替える
// (外部スキン・プラグインが cocoon_gutenberg_param_name/value フィルターを利用している可能性がある)
wp_localize_script( THEME_NAME . '-gutenberg-editor-classes', $name, $value );
}
}
endif;
// ツールバーボタンスタイリング用スクリプト
// enqueue_block_editor_assets で登録することで、常に iframe の外側で実行される。
add_action( 'enqueue_block_editor_assets', 'cocoon_enqueue_toolbar_script' );
if ( ! function_exists( 'cocoon_enqueue_toolbar_script' ) ):
function cocoon_enqueue_toolbar_script() {
if ( is_visual_editor_style_enable() && is_admin() ) {
// スクリプトファイルのパスを変数に保持する(filemtime でバージョン管理するため)
$toolbar_js = '/js/gutenberg-toolbar.js';
$toolbar_js_path = get_cocoon_template_directory() . $toolbar_js;
wp_enqueue_script(
THEME_NAME . '-gutenberg-toolbar',
get_cocoon_template_directory_uri() . $toolbar_js,
array(), // jQuery 不要
// ファイルが存在しない場合は false(WP バージョン)にフォールバックして Warning を防ぐ
file_exists( $toolbar_js_path ) ? filemtime( $toolbar_js_path ) : false,
true
);
}
}
endif;
// Classic Editor用のCSS読み込みを利用してGutenberg用のCSSを設定
if (is_wp_5_8_or_over()) {
add_filter ( 'block_editor_settings_all', 'gutenberg_editor_settings', 10, 2 );
} else {
add_filter ( 'block_editor_settings', 'gutenberg_editor_settings', 10, 2 );
}
if ( ! function_exists( 'gutenberg_editor_settings' ) ):
function gutenberg_editor_settings( $editor_settings, $post ) {
/** @var array $editor_settings */
/** @var WP_Post $post */
if ( is_visual_editor_style_enable() ) {
/**
* Filters the styles.
*
* @since 1.4.8
*
* @param array $editor_settings Default editor settings.
* @param WP_Post $post Post being edited.
*/
$styles = apply_filters( 'cocoon_extract_gutenberg_styles', array(), $editor_settings, $post );
/**
* Filters the stylesheets.
*
* @since 1.4.8
*/
$stylesheets = apply_filters( 'cocoon_gutenberg_stylesheets', visual_editor_stylesheets_custom( array() ) );
foreach ( $stylesheets as $item ) {
$item = strtok( $item, '?' );
$path = url_to_local( $item );
if ( empty( $path ) ) {
$response = wp_remote_get( $item );
if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) === 200 ) {
$styles[] = array(
'css' => wp_remote_retrieve_body( $response ),
// リモートCSSでもローカル同様に baseURL を設定し、相対URLを正しく解決させる
'baseURL' => $item,
);
}
} else {
if ( file_exists( $path ) ) {
$styles[] = array(
'css' => wp_filesystem_get_contents( $path ),
// CSS 内の相対 URL(url(images/bg.png) 等)をこの URL を基準に解決させる
'baseURL' => $item,
);
}
}
}
// 他のプラグインが設定した既存スタイルを保持しつつ、Cocoon のスタイルを追加する
$editor_settings['styles'] = array_merge(
$editor_settings['styles'] ?? array(),
$styles
);
}
return $editor_settings;
}
endif;
// RSS2 の feed リンクを出力
add_theme_support( 'automatic-feed-links' );
// カスタムメニューを有効化
add_theme_support( 'menus' );
// カスタムメニューの「場所」を設定
add_action('init', function() {
register_nav_menus(
array(
NAV_MENU_HEADER => __( 'ヘッダーメニュー', THEME_NAME ),
NAV_MENU_HEADER_MOBILE => __( 'ヘッダーモバイルメニュー', THEME_NAME ),
NAV_MENU_HEADER_MOBILE_BUTTONS => __( 'ヘッダーモバイルボタン', THEME_NAME ),
NAV_MENU_FOOTER => __( 'フッターメニュー', THEME_NAME ),
NAV_MENU_FOOTER_MOBILE_BUTTONS => __( 'フッターモバイルボタン', THEME_NAME ),
NAV_MENU_MOBILE_SLIDE_IN => __( 'モバイルスライドインメニュー', THEME_NAME ),
)
);
});
//抜粋表示
add_action('init', 'add_excerpts_custom_init');
if ( !function_exists( 'add_excerpts_custom_init' ) ):
function add_excerpts_custom_init(){
//固定ページに抜粋を追加
add_post_type_support( 'page', 'excerpt' );
//カスタム投稿ページにも追加
$custum_post_types = get_custum_post_types();
foreach ($custum_post_types as $custum_post_type) {
add_post_type_support( $custum_post_type, 'excerpt' );
}
}
endif;
//カスタムヘッダー
$custom_header_defaults = array(
'random-default' => false,
'width' => 1200,//サイドバーの幅によって変更
'height' => 100,
'flex-height' => false,
'flex-width' => false,
'default-text-color' => '',
'header-text' => false,
'uploads' => true,
);
//カスタムヘッダー
add_theme_support( 'custom-header', $custom_header_defaults );
//テキストウィジェットでショートコード利用する
add_filter('widget_text', 'do_shortcode');
add_filter('widget_text_pc_text', 'do_shortcode');
add_filter('widget_text_mobile_text', 'do_shortcode');
add_filter('widget_mobile_ad_text', 'do_shortcode');
//add_filter('widget_classic_text', 'do_shortcode');
add_filter('widget_ad_text', 'do_shortcode');
add_filter('widget_pc_ad_text', 'do_shortcode');
add_filter('widget_pc_double_ad1_text', 'do_shortcode');
add_filter('widget_pc_double_ad2_text', 'do_shortcode');
//ランキングアイテム内でショートコード利用する
add_filter('ranking_item_name', 'do_shortcode');
add_filter('ranking_item_image_tag', 'do_shortcode');
add_filter('ranking_item_description', 'do_shortcode');
add_filter('ranking_item_link_tag', 'do_shortcode');
//キャンペーンショートコードでもショートコードを利用する
add_filter('campaign_shortcode_content', 'do_shortcode');
//アピールエリアadd_filter('appeal_area_message', 'wptexturize');
add_filter('appeal_area_message', 'convert_smilies');
add_filter('appeal_area_message', 'convert_chars');
add_filter('appeal_area_message', 'wpautop');
add_filter('appeal_area_message', 'shortcode_unautop');
add_filter('appeal_area_message', 'do_shortcode');
add_filter('appeal_area_message', 'wp_filter_content_tags');
//カテゴリー・タグページ(※フックの順番が大事)
add_filter('the_category_tag_content', 'wptexturize');
add_filter('the_category_tag_content', 'convert_smilies');
add_filter('the_category_tag_content', 'convert_chars');
add_filter('the_category_tag_content', 'wpautop');
add_filter('the_category_tag_content', 'shortcode_unautop');
add_filter('the_category_tag_content', 'do_shortcode');
add_filter('the_category_tag_content', 'wp_filter_content_tags');//WordPress5.5未満
//カテゴリー・タグページの本文で埋め込みを処理する
if (isset($wp_embed) && $wp_embed) {
add_filter('the_category_tag_content', array($wp_embed, 'autoembed'), 8);
}
//generator を削除
remove_action('wp_head', 'wp_generator');
//EditURI を削除
remove_action('wp_head', 'rsd_link');
//wlwmanifest を削除
remove_action('wp_head', 'wlwmanifest_link');
// Embed WPのブログカード。他サイトのアイキャッチ画像や抜粋自動埋め込み
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
// 管理画面絵文字削除
add_action('init', 'remove_action_emoji');
if ( !function_exists( 'remove_action_emoji' ) ):
function remove_action_emoji(){
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
}
endif;
//カスタム背景
$custom_background_defaults = array(
'default-color' => 'ffffff',
);
add_theme_support( 'custom-background', $custom_background_defaults );
//ヘッダーに以下のようなタグが挿入されるWP4.4からの機能を解除
//<link rel='https://api.w.org/' href='http:/xxxx/wordpress/wp-json/' />
remove_action( 'wp_head', 'rest_output_link_wp_head' );
//WordPress3.5で廃止されたリンクマネージャを表示する
add_filter('pre_option_link_manager_enabled','__return_true');
// WordPress 6.9で変更されたブロックスタイルの個別読み込みを無効化(CSS縮小時などに不具合が出るため)
add_filter( 'should_load_separate_core_block_assets', '__return_false' );
//oembed無効
add_filter( 'embed_oembed_discover', '__return_false' );
//Embeds
remove_action( 'parse_query', 'wp_oembed_parse_query' );
remove_action( 'wp_head', 'wp_oembed_remove_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_remove_host_js' );
//本文中のURLが内部リンクの場合にWordPressがoembedをしてしまうのを解除(WP4.5.3向けの対策)
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result' );
//不要なテーマカスタマイザー項目を削除
add_action( 'customize_register', 'customize_register_custom' );
if ( !function_exists( 'customize_register_custom' ) ):
function customize_register_custom( $wp_customize ) {
//サイト基本情報
//$wp_customize->remove_section('title_tagline');
//色
$wp_customize->remove_section('colors');
// //背景画像がある場合
// $wp_customize->remove_section('background_image');
//ヘッダーメディア
$wp_customize->remove_section('header_image');
//メニュー
//$wp_customize->remove_panel('nav_menus');
//↑こちのコードでは消えなかった
//remove_action( 'customize_register', array( $wp_customize->nav_menus, 'customize_register' ), 11 );
// //ウィジェット
// $wp_customize->remove_panel('widgets');
// //固定フロントページ
// $wp_customize->remove_section('static_front_page');
// //追加CSS
// $wp_customize->remove_section('custom_css');
}
endif;
// //WordPressデフォルトが出力するサイトアイコンを表示しない
// remove_action ('wp_head', 'wp_site_icon');
// add_filter('site_icon_meta_tags', 'filter_site_icon_meta_tags');
// if ( !function_exists( 'filter_site_icon_meta_tags' ) ):
// function filter_site_icon_meta_tags($meta_tags) {
// //array_splice($meta_tags, 2);
// return array();
// }
// endif;
//Live Writerでテーマ取得する際は、RSSを出力しない
if (is_user_agent_live_writer()) {
//RSSフィードの停止
remove_action('do_feed_rdf', 'do_feed_rdf');
remove_action('do_feed_rss', 'do_feed_rss');
remove_action('do_feed_rss2', 'do_feed_rss2');
remove_action('do_feed_atom', 'do_feed_atom');
}
//show_admin_bar( false );
//ログインユーザー以外はBuddyPressの管理バーを除去する
if (!is_user_logged_in()) {
remove_action('init', 'bp_core_load_admin_bar', 9);
}
//CSS、JSファイルに編集時間をバージョンとして付加する(ファイル編集後のブラウザキャッシュ対策)
add_filter( 'style_loader_src', 'add_file_ver_to_css_js', 9999 );
add_filter( 'script_loader_src', 'add_file_ver_to_css_js', 9999 );
if ( !function_exists( 'add_file_ver_to_css_js' ) ):
function add_file_ver_to_css_js( $src ) {
//サーバー内のファイルの場合
if (includes_site_url($src)) {
//WordPressのバージョンを除去する場合
// if ( strpos( $src, 'ver=' ) )
// $src = remove_query_arg( 'ver', $src );
//クエリーを削除したファイルURLを取得
$removed_src = preg_replace('{\?.*}i', '', $src);
//URLをパスに変換
$stylesheet_file = url_to_local( $removed_src );
if (file_exists($stylesheet_file)) {
//ファイルの編集時間バージョンを追加
$src = add_query_arg( 'fver', wp_date('Ymdhis', filemtime($stylesheet_file)), $src );
}
}
return $src;
}
endif;
//gistのembed対応
wp_embed_register_handler( 'gist', '/https?:\/\/gist\.github\.com\/([a-z0-9]+)\/([a-z0-9]+)(#file=.*)?/i', 'wp_embed_register_handler_for_gist' );
if ( !function_exists( 'wp_embed_register_handler_for_gist' ) ):
function wp_embed_register_handler_for_gist( $matches, $attr, $url, $rawattr ) {
$embed = sprintf(
'<script src="https://gist.github.com/%1$s/%2$s.js"></script>',
esc_attr( $matches[1] ),
esc_attr( $matches[2] )
);
return apply_filters( 'embed_gist', $embed, $matches, $attr, $url, $rawattr );
}
endif;
///////////////////////////////////////
// Etag と Last-modified ヘッダを使って動的コンテンツでもブラウザキャッシュさせる
///////////////////////////////////////
//add_action( 'wp','header_last_modified_and_etag', 0 );
if ( !function_exists( 'header_last_modified_and_etag' ) ):
function header_last_modified_and_etag() {
if (is_singular() && !is_plugin_fourm_page()) {
$modified_time = get_the_modified_time( 'U' );
$amp = is_amp() ? '1' : '0';
// Last-modified と ETag 生成
$last_modified = gmdate( "D, d M Y H:i:s T", $modified_time );
$etag = md5( $last_modified . get_permalink() . $amp );
// ヘッダ送信
header( "Last-Modified: {$last_modified}" );
header( "Etag: {$etag}" );
// リクエストヘッダの If-Modified-Since と If-None-Match を取得
$if_modified_since = filter_input( INPUT_SERVER, 'HTTP_IF_MODIFIED_SINCE' );
$if_none_match = filter_input( INPUT_SERVER, 'HTTP_IF_NONE_MATCH' );
// Last-modified または Etag と一致していたら 304 Not Modified ヘッダを返して終了
if ( $if_modified_since === $last_modified || $if_none_match === $etag ) {
header( 'HTTP', true, 304 );
exit;
}
}
}
endif;
//ウィジェット表示タイプのオプション配列
if ( !function_exists( 'get_widget_entry_type_options' ) ):
function get_widget_entry_type_options(){
return array(
ET_DEFAULT =>
get_image_preview_tag('https://wp-cocoon.com/wp-content/uploads/2019/07/default.png', __( '通常のカード表示', THEME_NAME ), 360).
__( 'デフォルト', THEME_NAME ),
ET_BORDER_PARTITION =>
get_image_preview_tag('https://wp-cocoon.com/wp-content/uploads/2019/07/border_partition.png', __( 'カードの上下に破線の区切り線が表示されます。', THEME_NAME ), 360).
__( 'カードの上下に区切り線を入れる', THEME_NAME ).__( '(縦並び表示のみ)', THEME_NAME ),
ET_BORDER_SQUARE =>
get_image_preview_tag('https://wp-cocoon.com/wp-content/uploads/2019/07/border_square.png', __( 'カード自体を罫線で囲みます。', THEME_NAME ), 360).
__( 'カードに枠線を表示する', THEME_NAME ),
ET_LARGE_THUMB =>
get_image_preview_tag('https://wp-cocoon.com/wp-content/uploads/2019/07/large_thumb-1.jpg', __( '大きなサムネイル画像の下にタイトルを表示します。', THEME_NAME ), 360).
__( '大きなサムネイル表示にする', THEME_NAME ),
ET_LARGE_THUMB_ON =>
get_image_preview_tag('https://wp-cocoon.com/wp-content/uploads/2019/07/large_thumb_on-1.jpg', __( '大きなサムネイル画像の下段にタイトルを重ねます。', THEME_NAME ), 360).
__( '大きなサムネイルにタイトルを重ねて表示する', THEME_NAME ),
);
}
endif;
//ウィジェット表示スタイルのオプション配列
if ( !function_exists( 'get_widget_style_options' ) ):
function get_widget_style_options(){
return array(
'image_only' => get_image_preview_tag('https://im-cocoon.net/wp-content/uploads/rcs_image_only.png').__( '画像のみ', THEME_NAME ),
RC_DEFAULT => get_image_preview_tag('https://im-cocoon.net/wp-content/uploads/rcs_center_white_title.png').__( '画像中央に白文字タイトル', THEME_NAME ),
'center_label_title' => get_image_preview_tag('https://im-cocoon.net/wp-content/uploads/rcs_center_label_title.png').__( '画像中央にラベルでタイトル', THEME_NAME ),
ET_LARGE_THUMB_ON => get_image_preview_tag('https://im-cocoon.net/wp-content/uploads/rcs_large_thumb_on.png').__( '画像下段を黒背景にしタイトルを重ねる', THEME_NAME ),
);
}
endif;
//カスタム投稿動作確認用
if (DEBUG_MODE) {
add_action( 'init', 'debug_create_post_type' );
function debug_create_post_type() {
register_post_type( 'news',
array( // 投稿タイプ名の定義
'labels' => [
'name' => 'ニュース', // 管理画面上で表示する投稿タイプ名
'singular_name' => 'news', // カスタム投稿の識別名
],
'public' => true, // 投稿タイプをpublicにするか
'has_archive' => false, // アーカイブ機能ON/OFF
'menu_position' => 5, // 管理画面上での配置場所
'show_in_rest' => true, // 5系から出てきた新エディタ「Gutenberg」を有効にする
'supports' => array('title','editor','thumbnail'),
)
);
}
}