-
投稿者投稿
-
2019年11月2日 4:59 PM #33109
【お使いの 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を「任意のタクソノミーの投稿」にも適用させるのが希望です。
♥ 0Who liked: No user2019年11月5日 3:27 PM #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
の内容を貼り付けてもらうことはできますか?♥ 0Who liked: No user2019年11月5日 10:16 PM #33896ありがとうございます。
ご教示いただいた、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(①②を使用している)を適用させたいと、書きましたが、①②とは別のテンプレートを、特定の「任意のタクソノミーの投稿」あるいは、「任意のタクソノミーの投稿」にだけ
当てることはできませんでしょうか。
また、特定の「任意のタクソノミーの投稿」だけリッチメディアにするなど形式を変えるのは難しいでしょうか。色々と分かりにくい内容ですみません。よろしくお願いいたします。
♥ 0Who liked: No user2019年11月6日 12:07 PM #33957template-parts/widget/snow-monkey-posts.php
を直接書き換え(あるいは上書き)されたのでしょうか? もしそうならそれはやってはダメです><
template-parts/widget/snow-monkey-posts.php
は「最近の投稿」からも呼びだされるので、これを書き換え(上書き)してしまうと「最近の投稿」にも影響がでてしまいます。MT さんのファイル構成が実際にどうなのかがわからないと適切なアドバイスをすることが難しいので、まずは
archive-example.php
に書いているコードを共有してもらえればと思います。♥ 0Who liked: No user2019年11月9日 3:02 PM #34438返信が遅くなり、申し訳ございません。
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>
♥ 0Who liked: No user2019年11月11日 9:39 AM #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 );
♥ 0Who liked: No user2019年11月11日 1:10 PM #34679ご返信ありがとうございます。ややこしい内容のようで恐縮です。
ご教示いただいたコードのここに
template-parts/widget/snow-monkey-postsを好きな形にカスタマイズした内容を記述
は、レイアウトも含めてゼロからHTMLを書くということですね。
ループが絡んでいるので、私の知識では、既存のレイアウト等を使わないと難しい感じです。カスタマイズ部分は、
例えばsnow-monkey-posts-example
で、「任意のタクソノミーの投稿」の場合、template-parts/loop/entry-summary-example
(表示する項目はこのファイルでカスタマイズ)を読み込ませたいのですが、難しいでしょうか。難しいようであれば、今回は諦めようと思います。
♥ 0Who liked: No user2019年11月11日 1:44 PM #34682すみません、先のカスタマイズ部分のところで、
snow-monkey-posts-example
はtemplate-parts/widget/snow-monkey-posts-example
のことです。♥ 0Who liked: No user2019年11月11日 2:55 PM #34700add_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
を読み込むようになります。試してみてください!(ならなかったら再度見直します…!♥ 0Who liked: No user2019年11月11日 3:15 PM #34709ありがとうございます。
template-parts/widget/snow-monkey-posts-example.php
を読み込むことができました!
何度もご丁寧にご対応いただき、感謝いたします。
トピック閉じさせていただきます。♥ 0Who liked: No user -
投稿者投稿
- トピック「「任意のタクソノミーの投稿」にオリジナルテンプレートを適用したい」には新しい返信をつけることはできません。