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

0
Who liked: No user
  • このトピックには9件の返信、2人の参加者があり、最後にM Tにより5年前に更新されました。
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #33109
    M T
    閲覧者
    9

    【お使いの 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
    Who liked: No user
    #33796
    アバター画像キタジマ タカシ
    参加者
    2421

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

    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
    Who liked: No user
    #33896
    M T
    閲覧者
    9

    ありがとうございます。
    ご教示いただいた、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
    Who liked: No user
    #33957
    アバター画像キタジマ タカシ
    参加者
    2421

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

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

    0
    Who liked: No user
    #34438
    M T
    閲覧者
    9

    返信が遅くなり、申し訳ございません。
    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
    Who liked: No user
    #34626
    アバター画像キタジマ タカシ
    参加者
    2421

    ありがとうございます。流用するのは難しそうな気がするので、フック内に 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
    Who liked: No user
    #34679
    M T
    閲覧者
    9

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

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

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

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

    0
    Who liked: No user
    #34682
    M T
    閲覧者
    9

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

    0
    Who liked: No user
    #34700
    アバター画像キタジマ タカシ
    参加者
    2421
    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
    Who liked: No user
    #34709
    M T
    閲覧者
    9

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

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

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。