-
投稿者投稿
-
2024年4月22日 9:18 PM #138942
【お使いの Snow Monkey のバージョン】25.4.3
【お使いの Snow Monkey Blocks のバージョン】20.5.2
【お使いの Snow Monkey Editor のバージョン】9.4.0
【お使いのブラウザ】Chrome(Windows)
【当該サイトのURL】ローカル上で作成中### 実現したいこと
多数の投稿者がカスタム投稿で投稿をするサイトを構築中で、投稿者アーカイブページにカスタム投稿の記事一覧を表示させたいと思っています。デフォルトの投稿は行わないので、通常の表示は「投稿がありません」と表示されてしまいます。またカスタムフィールドの値なども多数表示させたいので、content部分のテンプレートを独自のものに差し替えたい、と考えています。
my-snow-monkeyを通して、フックなどでその他のカスタマイズを行ってきたので、子テーマはできれば使わずに実現させたいです。
また「snow_monkey_template_part_root_hierarchy」は公式に「表示速度が低下してしまう」とありましたので、このフックではなく「snow_monkey_template_part_root_hierarchy_{slug}」などで実現させたいです。
### 発生している問題
### 試したこと
差し替え対象のテンプレートを調べたら「template-parts/archive/entry/content/none」でした。そこでmy-snow-monkeyに
add_filter( 'snow_monkey_template_part_root_hierarchy_template-parts/archive/entry/content/none', function( $hierarchy, $name, $vars ) { if( is_author() ) { $name = ''; $hierarchy[] = __DIR__ . '/override'; return $hierarchy; } }, 10, 4 );
と記述し、overrideフォルダ内の上記と同じ構造のフォルダ内に「none.php」を作成し、独自のテンプレートとして記述して差替はできました。
しかし、そもそもこの「none.php」というのは「該当テンプレートなし」の場合のものかと思います。ですので「投稿者アーカイブページの場合だけ独自テンプレートを読み込む」という仕様にしたいのですが、何かやり方はありますでしょうか?
♥ 0いいねをした人: 居ません2024年4月23日 8:44 AM #138953こんな感じにすれば、
snow_monkey_template_part_root_hierarchy
無しでできます。著者アーカイブのコンテンツ部分のテンプレートを対象に書き換えるサンプルです。add_filter( 'snow_monkey_pre_template_part_render_template-parts/archive/entry/content/content', function( $slug, $name, $vars ) { if ( ! is_author() ) { return null; // null を返すともともとの HTML を出力する } ob_start(); ?> <div class="c-entry__content p-entry-content"> 任意の HTML </div> <?php return ob_get_clean(); }, 10, 4 );
2024年4月23日 5:16 PM #138968早速のご回答ありがとうございます。試してみたところ、
‘snow_monkey_pre_template_part_render_template-parts/archive/entry/content/content’
この関数名は最後「content」ではなくて「none」ではないでしょうか。
none.phpを呼び出していると思うので・・・実際ここを「none」に替えたら任意のHTML出力はできました。
その先なのですが、ユーザーのカスタム投稿記事一覧を出力したいと思っています。そこで「ob_start();」と「return ob_get_clean();」の間に、
<div class="c-entry__content p-entry-content"> <?php $userId = get_query_var('author'); $user = get_userdata($userId); if (!empty($user->description)) { echo '<div>' . $user->description . '</div>'; } $args = array( 'author' => $userId, 'orderby' => 'date', 'post_type' => 'machines', 'numberposts' => -1, ); $posts = get_posts($args); if (!empty($posts)) { echo '<ul>'; foreach( $posts as $post ) : setup_postdata($post); ?> <?php var_dump($post); ?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <?php echo get_the_date("Y/n/j");?></li> <?php endforeach; wp_reset_postdata(); echo '</ul>'; } ?> </div>
という記述を入れました。普通に著者アーカイブページならこのソースでカスタム投稿(machines)の記事情報は出力できたのですが、こちらでは何も出力されませんでした。「 $user-$gt;description」で著者プロフィール欄は出力できましたが、foreachのループ内が出力されません。var_dumpで$postsと$postを見たら値は入っているのですが・・・
あとひと息だと思うのですが自分が調べた限りではこれ以上はちょっとわからず・・・すいませんがさらにご教授いただけませんでしょうか。よろしくお願いいたします。
♥ 0いいねをした人: 居ません2024年4月23日 5:23 PM #1389722024年4月23日 10:15 PM #138979ひとまず。
/** * 著者ページのメインクエリを書き換える */ add_action( 'pre_get_posts', function( $query ) { if ( is_author() && $query->is_main_query() ) { $query->set( 'post_type', 'news' ); } } ); /** * 著者ページのコンテンツの先頭にプロフィールを表示 */ add_action( 'snow_monkey_prepend_archive_entry_content', function() { if ( is_author() ) { $user_id = get_query_var( 'author' ); $user = get_userdata( $user_id ); if ( !empty( $user->description ) ) { echo '<div>' . wp_kses_post( $user->description ) . '</div>'; } } } );
あとはカスタムフィールドの値をどこに表示するかで、どのテンプレートを上書きするかを検討して…という感じですかね。ループ内の各項目を丸ごとなら
template-parts/loop/entry-summary
、ループ内の各項目の本文部分だけで良いならtemplate-parts/loop/entry-summary/content/content
とかですね。2024年4月25日 5:17 PM #139072ご回答ありがとうございました!
とりあえず著者ページは以下のソースでloop部分のテンプレートを差し替えることでやりたいことが達成できました!add_filter( 'snow_monkey_template_part_root_hierarchy_template-parts/loop/entry-summary', function( $hierarchy, $name, $vars ) { if( is_author() ) { $name = 'machines'; $hierarchy[] = __DIR__ . '/override'; return $hierarchy; } }, 10, 4 );
ところが、これをセットしたらカスタム投稿(machines)のアーカイブページと、ひも付いているカスタムタクソノミーのアーカイブページで以下のエラーが発生してしまいました。
Fatal error: Uncaught TypeError: array_filter(): Argument #1 ($array) must be of type array, null given in ローカル環境のパス\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php:321 Stack trace: #0
これ以降もエラー表示はずっと続いているのでとりあえず冒頭部分だけです。
if(is_author())で著者ページしか書き換わらないようにも思うのですが・・・何度もお手数おかけして申し訳ございませんが、これはどうしたらよろしいでしょうか。♥ 0いいねをした人: 居ません2024年4月26日 9:00 AM #139084上記のコードだと、
is_author
のときしかreturn
していないので、その他の条件のときも(無加工の値を)返す必要があると思います。こうしてみるとどうですかね?add_filter( 'snow_monkey_template_part_root_hierarchy_template-parts/loop/entry-summary', function( $hierarchy, $name, $vars ) { if( is_author() ) { $hierarchy[] = __DIR__ . '/override'; return $hierarchy; } return $hierarchy; }, 10, 4 );
2024年4月26日 2:27 PM #139096 -
投稿者投稿
- トピック「投稿者アーカイブ用の独自テンプレートを読み込ませたい」には新しい返信をつけることはできません。