「任意のタクソノミーの投稿」にオリジナルテンプレートを適用したい

  • このトピックには9件の返信、2人の参加者があり、最後にM Tにより3ヶ月、 2週前に更新されました。
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #33109
    M T
    参加者

    【お使いの Snow Monkey のバージョン】v8.0.0

    お世話になっております。
    いつもご丁寧なご回答ありがとうございます。

    トップページ(固定ページ)にブロックを使って「任意のタクソノミーの投稿」を設置していますが、これにオリジナルのテンプレートを適用させることはできませんでしょうか。

    カスタム投稿タイプのアーカイブページ(一覧)には、オリジナルのテンプレートmy-snow-monkey/view/templates/view/archive-example.phpを適用しています。
    目的は、カスタムフィールド(商品に関する情報)の一部を表示させるためで、レイアウトはテーマ既存のもの(シンプル)です。
    カスタムフィールドの内容は、my-snow-monkey/view/template-parts/loop/entry-summary-example.phpに記載しています。

    同様にarchive-example.phpを「任意のタクソノミーの投稿」にも適用させるのが希望です。

    0
    #33796
    キタジマ タカシ
    キーマスター

    任意のタクソノミーの投稿は、次のようなルートでテンプレートを呼びだします。

    template-parts/widget/snow-monkey-posts.php

    template-parts/loop/entry-summary.php

    このとき、snow-monkey-posts.php にはリストの大枠の HTML が記述されていて、entry-summary.php には各項目(li の内側)の HTML が記述されています。

    MT さんの archive-example.php にどのような内容がかかれているかにもよりますが、以下の方法が考えられるかと思います。

    – 通常のアーカイブリストと違う部分が各項目の内側だけなら、entry-summary-example.php をつくり、 archive-example.php はそれを呼びだす形にする
    – アーカイブリストの大枠も含めて通常のアーカイブリストと違うなら、 大枠部分を記述した独立したテンプレートをつくり、 ウィジェットと archive-example.php でそのテンプレートを呼びだすようにする。
    archive-example.php = アーカイブリスト(つまりページ見出しだとかリスト以外の要素が含まれていない)のであれば、ウィジェットも archive-example.php を呼びだすようにさせる。

    archive-example.php がどのような内容になっているかで、どの方法を選ぶかが変わると思います。archive-example.php の内容を貼り付けてもらうことはできますか?

    0
    #33896
    M T
    参加者

    ありがとうございます。
    ご教示いただいた、template-parts/widget/snow-monkey-posts.phpの参照先を以下(変更部分のみ)のように①②(オリジナルの表示内容を記載)にしてみたところ、「任意のタクソノミーの投稿」の内容が切り替わりましたが、「最新の投稿」など他のウィジェットに影響が出てしまいます。
    entry-summary-school.php
    entry-summary-school-en.php

    			<li class="c-entries__item">
    <?php $locale = get_locale();
    if ('ja' == $locale  ) { //日本語の場合
    				Helper::get_template_part(
    					'template-parts/loop/entry-summary-school',
    					get_post_type(),
    					[
    						'_entries_layout' => $template_args['entries_layout'],
    						'_excerpt_length' => $template_args['excerpt_length'],
    					]
    				);
    	}else { //それ以外の場合
    				Helper::get_template_part(
    					'template-parts/loop/entry-summary-school-en',
    					get_post_type(),
    					[
    						'_entries_layout' => $template_args['entries_layout'],
    						'_excerpt_length' => $template_args['excerpt_length'],
    					]
    				);	
    				}		
    				?>
    			</li>

    すみません、前の質問で、archive-example.php(①②を使用している)を適用させたいと、書きましたが、①②とは別のテンプレートを、特定の「任意のタクソノミーの投稿」あるいは、「任意のタクソノミーの投稿」にだけ
    当てることはできませんでしょうか。
    また、特定の「任意のタクソノミーの投稿」だけリッチメディアにするなど形式を変えるのは難しいでしょうか。

    色々と分かりにくい内容ですみません。よろしくお願いいたします。

    0
    #33957
    キタジマ タカシ
    キーマスター

    template-parts/widget/snow-monkey-posts.php を直接書き換え(あるいは上書き)されたのでしょうか? もしそうならそれはやってはダメです><
    template-parts/widget/snow-monkey-posts.php は「最近の投稿」からも呼びだされるので、これを書き換え(上書き)してしまうと「最近の投稿」にも影響がでてしまいます。

    MT さんのファイル構成が実際にどうなのかがわからないと適切なアドバイスをすることが難しいので、まずは archive-example.php に書いているコードを共有してもらえればと思います。

    0
    #34438
    M T
    参加者

    返信が遅くなり、申し訳ございません。
    template-parts/widget/snow-monkey-posts.phpは子テーマは上書きしてみましたが、他に影響がでてしまいましたので、元に戻しました。
    以下がarchive-example.php の中身です。

    <?php
    /**
     * @package snow-monkey
     * @author inc2734
     * @license GPL-2.0+
     * @version 6.0.0
     */
    
    use Framework\Helper;
    ?>
    
    <div class="c-entry">
    <?php $locale = get_locale();
    if ('ja' == $locale  ) {
    		Helper::get_template_part( 'template-parts/archive/entry/header/header_jp', get_post_type() );
    	}else { //それ以外の場合
      Helper::get_template_part( 'template-parts/archive/entry/header/header', get_post_type() );
    }
    	?>
    	<div class="c-entry__body">
    <?php $locale = get_locale();
    if ('en_US' == $locale  ) {
    		Helper::get_template_part( 'template-parts/archive/entry/content/content_school_en', get_post_type() );
    	}else { //それ以外の場合
      Helper::get_template_part( 'template-parts/archive/entry/content/content_school', get_post_type() );
    }
    	?>
    
    	</div>
    </div>
    0
    #34626
    キタジマ タカシ
    キーマスター

    ありがとうございます。流用するのは難しそうな気がするので、フック内に HTML を直接書いちゃうのが良いかなと思いました。カスタマイズの内容が大きいのでちょっとフォーラムでちょろっとやるのは難しいかなと思うのですが、多分やり方的には下記のような感じになるのかなと。

    // 任意のタクソノミーウィジェットを独自の HTML で出力
    add_filter(
    	'snow_monkey_template_part_render',
    	function( $html, $slug, $name, $vars ) {
    		// 任意のタクソノミーの投稿ブロックの場合
    		if ( 'template-parts/widget/snow-monkey-posts' === $slug && 'taxonomy' === $name ) {
    			// タクソノミー hoge の場合
    			$query = $vars['_posts_query'];
    			if ( isset( $query->tax_query->queries[0]['taxonomy'] ) && 'hoge' === $query->tax_query->queries[0]['taxonomy'] ) {
    				ob_start();
    				?>
    				ここに template-parts/widget/snow-monkey-posts を好きな形にカスタマイズした内容を記述
    				<?php
    				return ob_get_clean();
    			}
    		}
    		return $html;
    	},
    	10,
    	4
    );
    0
    #34679
    M T
    参加者

    ご返信ありがとうございます。ややこしい内容のようで恐縮です。

    ご教示いただいたコードのここにtemplate-parts/widget/snow-monkey-postsを好きな形にカスタマイズした内容を記述は、レイアウトも含めてゼロからHTMLを書くということですね。
    ループが絡んでいるので、私の知識では、既存のレイアウト等を使わないと難しい感じです。

    カスタマイズ部分は、
    例えばsnow-monkey-posts-exampleで、「任意のタクソノミーの投稿」の場合、template-parts/loop/entry-summary-example(表示する項目はこのファイルでカスタマイズ)を読み込ませたいのですが、難しいでしょうか。

    難しいようであれば、今回は諦めようと思います。

    0
    #34682
    M T
    参加者

    すみません、先のカスタマイズ部分のところで、
    snow-monkey-posts-exampletemplate-parts/widget/snow-monkey-posts-exampleのことです。

    0
    #34700
    キタジマ タカシ
    キーマスター
    add_filter(
    	'snow_monkey_get_template_part_args',
    	function( $args ) {
    		// 任意のタクソノミーの投稿ブロックの場合
    		if ( 'template-parts/widget/snow-monkey-posts' === $args['slug'] && 'taxonomy' === $args['name'] ) {
    			// タクソノミー hoge の場合
    			$query = $args['vars']['_posts_query'];
    			if ( isset( $query->tax_query->queries[0]['taxonomy'] ) && 'hoge' === $query->tax_query->queries[0]['taxonomy'] ) {
    				// name を example に差し替え
    				$args['name'] = 'example';
    			}
    		}
    		return $args;
    	}
    );

    とすることで、タクソノミーが hoge の「任意のタクソノミーの投稿」ブロックを読み込む場合に snow-monkey-posts-exampleはtemplate-parts/widget/snow-monkey-posts-example.php があればそれを、なければ snow-monkey-posts-exampleはtemplate-parts/widget/snow-monkey-posts.php を読み込むようになります。試してみてください!(ならなかったら再度見直します…!

    0
    #34709
    M T
    参加者

    ありがとうございます。
    template-parts/widget/snow-monkey-posts-example.phpを読み込むことができました!
    何度もご丁寧にご対応いただき、感謝いたします。
    トピック閉じさせていただきます。

    0
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • トピック「「任意のタクソノミーの投稿」にオリジナルテンプレートを適用したい」には新しい返信をつけることはできません。