投稿者アーカイブ用の独自テンプレートを読み込ませたい

0
いいねをした人: 居ません
  • このトピックには7件の返信、2人の参加者があり、最後にkota1010により7ヶ月前に更新されました。
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #138942
    kota1010
    参加者
    3

    【お使いの 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
    いいねをした人: 居ません
    #138953
    アバター画像キタジマ タカシ
    参加者
    2421

    こんな感じにすれば、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
    );
    2
    いいねをした人:
    #138968
    kota1010
    参加者
    3

    早速のご回答ありがとうございます。試してみたところ、

    ‘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
    いいねをした人: 居ません
    #138972
    アバター画像キタジマ タカシ
    参加者
    2421

    あ!記事がある状態で実験してました。すみません。再度確認します!

    1
    いいねをした人:
    #138979
    アバター画像キタジマ タカシ
    参加者
    2421

    ひとまず。

    /**
     * 著者ページのメインクエリを書き換える
     */
    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 とかですね。

    1
    いいねをした人:
    #139072
    kota1010
    参加者
    3

    ご回答ありがとうございました!
    とりあえず著者ページは以下のソースで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
    いいねをした人: 居ません
    #139084
    アバター画像キタジマ タカシ
    参加者
    2421

    上記のコードだと、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
    );
    1
    いいねをした人:
    #139096
    kota1010
    参加者
    3

    できました!
    何度もお付き合い下さいましてありがとうございました。
    ひとりではここまでたどり着けなかったと思います。
    本当に感謝です。どうもありがとうございました。

    1
    いいねをした人:
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • トピック「投稿者アーカイブ用の独自テンプレートを読み込ませたい」には新しい返信をつけることはできません。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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