子テーマ化

閲覧数: 32(0)

復帰記念にテーマを変更した記事「テーマリニューアル」では子テーマ化せずにCSSのみで対応する方針と言っていましたが、今回使用しているテーマである「Oblique」がバージョンアップすることになり、修正箇所を確認していたところ、いろいろ手を入れている部分も増えてきたのでこの際、前言を撤回して子テーマ化することにしましたw

Fashionistas」の時には親テーマを直接修正した部分があったのでバージョンアップに際して手作業が必要でしたが、今回は初めて「手作業フリー化」を達成しましたw

子テーマのフォルダは単純に「oblique-child」としました。それに合わせた「style.css」の冒頭部分の概略は以下の通りです。

Theme Name: Oblique Child ← 子テーマの名称
Theme URI: http://themeisle.com/themes/oblique
Author: Themeisle
Author URI: http://themeisle.com/
Template: oblique
Text Domain: oblique-child ← 子テーマのフォルダ名

「functions.php」では明示的に親テーマの「style.css」を読み込んでから子テーマの「style.css」を読み込むことにしました。ただし、子テーマ化した場合には、子テーマの「functions.php」が先に読み込まれてしまうため、親テーマの関数を上書きするなどの作業はこの時点では行えません。テーマ全体が読み込まれてから改めて関数の上書きなどを実施するために、「get_template_part()」で「inc/template-tags.php」を読み込んでいます。

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array('parent-style')
    );
}
get_template_part( 'inc/template', 'tags' );
?>

「oblique_footer_credits() 関数」は、フッター情報を表示する関数です。表示する内容を上書きしたかったので、子テーマ側に「同名」で書いたら親テーマを上書きできるのかと思ったのですが、二重宣言のエラーで上手くいきませんでした。そこで、実現したい表示内容を子テーマが読み込まれるタイミングで「.._credits2()関数」として登録し、その後、親テーマが読み込まれるタイミングではオリジナルの「.._credits()関数」をそのまま一旦は登録します。全テーマの読み込みが終わってから、以下の関数を呼び出すことにより、オリジナルのフッター情報を取り除いています。今回はこれが実現したので「手作業フリー化」を達成することができました。

function remove_footer_credits () {
        remove_action( 'oblique_footer', 'oblique_footer_credits' );
        }
add_action( 'after_setup_theme', 'remove_footer_credits' );

「oblique_excerpt_more2()関数」もオリジナルとの二重宣言を回避するため子テーマの読み込みのタイミングで別名登録し、親テーマの読み込みではオリジナルを一旦登録し、全テーマの読み込みが終わってからオリジナルを取り除くことで子テーマの機能を実現しています。ここではトップページで表示される抜粋記事の最後の「[…]」を記事へのリンクとする細工をしています。原理は上のフッター情報の取り除きと同じです。

以下が「inc/template-tags.php」の全行です。「oblique_updated_on()関数」は記事の最終更新日を表示するための関数です。これはオリジナルのテーマには含まれていないため単純な追加でOKです「oblique_entry_footer()関数」はフッターに表示される「タグ」をアイコン化するための関数です。

<?php
if ( ! function_exists( 'oblique_updated_on' ) ) :
function oblique_updated_on() {
        if ( esc_html(get_the_date(ymd)) < esc_html(get_the_modified_date(ymd))) {
        $time_string = '<time class="entry-date-updated" <time class="updated" datetime="%3$s">最終更新日 %4$s</time>';
        }
        $time_string = sprintf( $time_string,
                esc_attr( get_the_date( 'c' ) ),
                esc_html( get_the_date()),
                esc_attr( get_the_modified_date( 'c' ) ),
                esc_html( get_the_modified_date() )
        );
        printf( __( '<span style="margin-right:10px" class="byline">%1$s</span>', 'oblique' ),
                sprintf( '<a href="%1$s" rel="bookmark">%2$s</a>',
                        esc_url( get_permalink() ),
                        $time_string
                )
        );
}
endif;

if ( ! function_exists( 'oblique_entry_footer' ) ) :
        /**
         * Prints HTML with meta information for the categories, tags and comments.
         */
        function oblique_entry_footer() {
                // Hide category and tag text for pages.
                if ( 'post' == get_post_type() && ! get_theme_mod( 'meta_singles' ) ) {

                        /* translators: used between list items, there is a space after the comma */
                        $tags_list = get_the_tag_list( '', __( ', ', 'oblique' ) );
                        if ( $tags_list ) {
                                /* translators: Tags list */
                                printf( '<span class="tags-links">' . apply_filters( 'oblique_post_tags_message', __( '<span style="font-size:20px" class="genericon genericon-tag tag"></span> %1$s', 'oblique' ) ) . '</span>', $tags_list );
                        }
                }
        }
endif;

function oblique_footer_credits2() {
?>
        &copy;
<?php
        echo '2014-';
        echo date('Y');
        echo ' ';
        bloginfo( 'name' );
        esc_html_e('.&nbsp;All Right Reserved.', 'oblique');
        printf( __( '&emsp;Theme: %2$s by %1$s.', 'oblique' ), 'Themeisle', '<a class="site-footer" href="http://themeisle.com/themes/oblique/" rel="nofollow">Oblique</a>' );
        if ( wp_is_mobile() ) { echo "<br />";}
        echo '&emsp;<a href="' . esc_url( __('https://www.arigato.jp/プライバシ>ーポリシー/', 'oblique' ) ) . '" rel="nofollow"> プライバシーポリシー </a>';
        if ( is_tablet() ) { echo "<br />";}
        echo '&emsp;<a href="' . esc_url( __('mailto:webmaster@arigato.jp', 'oblique' ) ) . '" rel="nofollow"> お問い合わせ </a>';

}
add_action( 'oblique_footer', 'oblique_footer_credits2' );

function remove_footer_credits () {
        remove_action( 'oblique_footer', 'oblique_footer_credits' );
        }
add_action( 'after_setup_theme', 'remove_footer_credits' );

function oblique_excerpt_more2( $more ) {
        $excerpt = get_theme_mod( 'exc_lenght', '35' );
        if ( $excerpt == '0' ) {
                return '';
        } else {
                return '<a class="entry-meta" href=' . get_permalink( $post_id ). '> [...] </a>';
        }
}
add_filter( 'excerpt_more', 'oblique_excerpt_more2' );

function remove_excerpt_more () {
        remove_filter( 'excerpt_more', 'oblique_excerpt_more' );
        }
add_action( 'after_setup_theme', 'remove_excerpt_more' );

?>
カテゴリーIT閑話, 公開タグ,
検索精度を高める
2020年11月1日

検索ネタを連発するのはElasticsearchやElasticPressがバージョンアップした時の  続きを読む

ElasticPress日本語設定2020年版
blank
2020年10月29日

ElasticsearchをWordpressで利用するためのプラグインであるElasticPres  続きを読む

ElasticPress 3.5
blank
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

Elasticsearch 6.8.11
blank
2020年10月2日

2017年末に「2.4.6」から「5.6.5」へバージョンアップして以来の大幅バージョンアップです。  続きを読む

パンくずリスト詳細
blank
2020年5月12日

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

カテゴリーを制限する
blank
2020年5月11日

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トッ  続きを読む

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください