サポート » テーマ » thematicの子テーマについて

  • 解決済 koyki

    (@koyki)


    thematicというフレームワークを使おうと思っています。

    子テーマが用意してあるので、早速設置して、デザインの方は、何とかやれてるのですが、下記のようなことでつまずいています。

    トップページの方で、投稿した記事がそのまま表示されるのですが、これを文字数を制限し抜粋して表示させたいと思っています。
    変更箇所としては、

    (親テーマ)
    thematic\library\extensions\content-extensions.php内の661行目付近

    <div class=”entry-content”>

    <?php thematic_content(); ?>

    </div><!– .entry-content –>

    <div class=”entry-content”>

    <?php echo mb_substr(get_the_excerpt(), 0, 150); ?>

    </div><!– .entry-content –>

    で行なえばイメージどおりになる(親テーマを編集して直接確認)のですが、子テーマで対応する場合、CSSのように、functions.php内に上書き記述すればいいと簡単に思っていたのですが、それを行なうと真っ白な画面になるので、検索したところ、上書きは禁止だということで・・。
    現状、functions.php内にどう記述が必要なのか分からないでいます。

    親テーマを編集すれば、何とか対応は出来るのですが、thematicの方が定期的なバージョンアップを行なっているようなので、せっかくフレームワークを利用する魅力が半減するのかな・・と思っています。

    この機会に、少しでも、子テーマについて知識を深めればと思っていますが、よろしくお願いします。

    WordPress3.4.1を利用しています。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは、

    使っていませんので、あれなんですが

    child/functions.php

    $thematic_content_length = 'excerpt';
    
    	function childtheme_override_archive_loop() {
    		while ( have_posts() ) : the_post(); 
    
    				thematic_abovepost(); ?>
    
    				<div id="post-<?php the_ID();
    					echo '" ';
    					if (!(THEMATIC_COMPATIBLE_POST_CLASS)) {
    						post_class();
    						echo '>';
    					} else {
    						echo 'class="';
    						thematic_post_class();
    						echo '">';
    					}
         				thematic_postheader(); ?>
    					<div class="entry-content">
    	<?php //thematic_content(); ?>
    	<?php  //フィルタ使えば、上のままでもいいかも、?>
    <?php echo mb_substr(get_the_excerpt(), 0, 150); ?>
    					</div><!-- .entry-content -->
    					<?php thematic_postfooter(); ?>
    				</div><!-- #post -->
    
    			<?php 
    
    				thematic_belowpost();
    
    		endwhile;
    	}

    1.グローバル変数、$thematic_content_lengthにexcerptをセットして、thematic_content()をexcerptに変更する (echo mb_substr(get_the_excerpt(), 0, 150); なら、関係ないですが )

    2. childtheme_override_archive_loopという子テーマ用の関数を書く

    かなり作りこんであるテーマなので、どのような作りになっているのか理解するのが、難しいかもしれないですね :)

    トピック投稿者 koyki

    (@koyki)

    nobita さん、ありがとうございます。

    早速、functions.php内に記述してみました。
    残念ながら、150文字で抜粋表示にはならなかったのですが、ご返信いただき感謝しております。
    子テーマの仕組みは便利ですが、基本的にPHPを理解できるプログラマレベルじゃないと対応が難しいという事が改めて身をもって分かりました

    フレームワークは、0からテーマを作成しなくてもいいので、とっても便利なのですが、子テーマにて思ったようなレイアウトや、今回のようなちょっとした変更をしようとした場合、functions.phpで関数などを利用して・・という仕様だと、私みたいなノンプログラマーは敷居が高すぎますね。

    希望としては、CSSを編集するような上書きレベルで変更できれば一番いいのですが、そういう仕様には今後もならないんでしょうね・・。

    今回は、子テーマを利用するのはあきらめて、親テーマを直接編集しようと思います。
    今後のバージョンアップの恩恵は受けれませんが、バージョンアップで上書きされないよう、パーミッションを444以下にしとこうと思います。

    本当に、ありがとうございました。

    こんにちは

    希望としては、CSSを編集するような上書きレベルで変更できれば一番いいのですが、そういう仕様には今後もならないんでしょうね・・。

    それ、誤解ですよ。content-extensions.phpとfunctions.phpへ上書きと、質問にあったので、PHPで書いたのですが、普通の使い方は、同じですよ

    親テーマの、archive.phpをカスタマイズしたい場合は、子テーマに、archive.phpをコピーすればいいだけですよ。子テーマに、テンプレートファイルがあれば、ワードプレスは、そのテンプレートを使います。

    追伸:
    確かめていはいませんが、
    the_excerpt の文字数コントロールは、PHP関数を使うより、

    http://eastcoder.com/code/wp-multibyte-patch/

    プラグインを使って、文字数を設定したほうがいいと思います。

    トピック投稿者 koyki

    (@koyki)

    いろいろアドバイスいただきましてありがとうございます。

    > それ、誤解ですよ。content-extensions.phpとfunctions.phpへ上書きと、質問にあったので、PHPで書いたのですが、普通の使い方は、同じですよ

    すいません・・。
    ややこしいことを書いてしまいまして。
    今回の質問の場合、functions.phpの記述する場合とthe_excerpt の文字数コントロールについてWP Multibyte Patchを利用するという点で、使い分けを行なうことも必要だという点。

    それで、私の認識で、子テーマについて決め付けている部分があるようです。

    たとえばなんですが、フレームワーク化されているテンプレートの親テーマと子テーマの関係性として、index.phpやarchive.phpなどの中身に関し、今回のようなHTML部分は、ほぼ、関数化され、function.phpなどに収納されている・・という認識でいました。
    ※thematicだと、library - extensions内ファイルでほぼ管理。

    それで、今回のように、

    <div class=”entry-content”>
    <?php thematic_content(); ?>
    </div><!– .entry-content –>

    部分も、thematic_content()という感じで、親テーマ内thematic\library\extensions\content-extensions.phpで管理され、これを子テーマ内のfunctions.php内で処理しないといけないんじゃないか・・というイメージでした。
    ※the_excerpt の文字数コントロールは、教えていただいたWP Multibyte Patchでも対応可能。

    他のファイルに関し、子テーマにコピーした場合、目的としてる編集編集箇所が関数化されている場合は、子テーマのfunctions.php内で編集する必要があり、functions.phpで処理できない私が行なえる範囲としては、関数化されている子テーマにコピーしたファイルの中身を、別途、HTMLで新しく作り直すしかないのかな・・というイメージです。

    違うよ!といわれそうですが・・。

    こんにちは、

    他のファイルに関し、子テーマにコピーした場合、目的としてる編集編集箇所が関数化されている場合は、子テーマのfunctions.php内で編集する必要があり、functions.phpで処理できない私が行なえる範囲としては、関数化されている子テーマにコピーしたファイルの中身を、別途、HTMLで新しく作り直すしかないのかな・・というイメージです。

    テーマファイル(公式のもの)は、ワードプレスのテンプレート関数を、サポートしていなければならないというルールがあります。

    ワードプレス標準では、the_content()を、thematicでは、 thematic_content() を 使う事で、「こっちのほうがイケてるだろう」と いっているわけですが、標準のテンプレート関数は、必要ならいつでも使えます。

    親テーマで試作したテンプレートを、そのままチャイルドテーマにコピーしておくだけで、上書きされない、かつオリジナルテーマとして維持できるのは、とても便利な機能です。

    親テーマの膨大なファイルを、管理する必要もなく、自分のカスタマイズだけが記述されたチャイルドテーマを管理すればいいだけです

    親テーマで、成功した方法は、チャイルドテーマにコピーする事で、実現しましたか?

    補足
    functions.phpに親テーマの関数をコピーして、それをカスタマイズできるかどうかについては、テーマ制作者の設計によります。

    thematicの場合には、子テーマ関数が定義されている場合は、(childtheme_override_archive_loop と thematic_archive_loop)
    thematic_archive_loopの返り値を childtheme_override_archive_loopの返り値に変更するという設計のようです。

    だから、親テーマのfunctions.phpをコピーできません。
    他のテーマの場合、
    親テーマの関数が、以下のように書かれているテーマは

    if(function_exists('hoge')){ function hoge(){} }

    チャイルドテーマで、親のfunction hoge()をペーストして、改造する事が出来ます。

    テーマ設計者の考え方によるので、今回は、そのように出来なかったという事です。

    訂正

    if( ! function_exists( 'hoge' ) ){ function hoge( ){ } }

    トピック投稿者 koyki

    (@koyki)

    > 親テーマで、成功した方法は、チャイルドテーマにコピーする事で、実現しましたか?

    すいません、子テーマへの対応は、今のところ、うまくいってません。
    アドバイスいただきました内容を把握するにも知識不足もあり、試行錯誤してますが、まだまだの段階です。

    nobitaさんからいただきましたアドバイスやthematicを利用したテーマというのが、いくつかネット上でダウンロードできるところがあったので、その中身を参考にも、あせらずにいこうかと思っています。

    いろいろお手間をかけましてすみません。

    ありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「thematicの子テーマについて」には新たに返信することはできません。