任意のタクソノミーの投稿一覧にカスタムフィールドの値を表示させたい

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

    【お使いの Snow Monkey のバージョン】バージョン: 20.0.2
    【お使いの Snow Monkey Blocks のバージョン】バージョン 19.2.1
    【お使いの Snow Monkey Editor のバージョン】バージョン 9.2.1
    【お使いのブラウザ】Google Chrome
    【当該サイトのURL】https://sora-sanpo.com/_lib/lesson/

    ### 実現したいこと

    任意のタクソノミーの投稿を表示させたときカスタムフィールドの値を表示させたい

    現在はカテゴリーを表示させているのですが変更することになり、カスタムフィールドに入力した値を表示させることになりました。

    赤枠の所が現在カテゴリーを表示させているのですがそれをやめて、カスタムフィールドに入力した値を同じようなデザインで表示させたい。

    プラグインAdvanced Custom Fieldsでカスタムフィールドを設定。
    タイプはセレクトボックスを使用。

    フィールド名
    course_type


    movie:動画
    meet:対面
    certified:認定講座

    ### 発生している問題

    表示できない

    ### 試したこと

    過去フォーラムを参照
    トップページの最近の投稿ブロックにカスタムフィールドの値とタイトルを表示したい

    前回似た質問したときのトピック

    任意のタクソノミーの投稿の特定の場所にカテゴリーを表示させたい

    以前教えていただいたコードを変更して対応しようとしましたが力不足でできませんでした。
    お忙しいところ申し訳ありませんがご教示いただけると幸いです。

    現在はMySnowMonkeyにて教えていただいた下記コードを書きこんで表示しています。

    /**
     * レッスン一覧のカテゴリーラベルの表示
     */
    add_filter(
    	// template-parts/loop/entry-summary を書き換える
    	'snow_monkey_template_part_render_template-parts/loop/entry-summary',
    	function( $html, $name, $vars ) {
    		// 「シンプル」のときだけ実行
    		if ( 'simple' === $vars['_entries_layout'] ) {
    			// カテゴリーラベルを取得して、各項目の最後に追加する。
    			ob_start();
    			\Framework\Helper::get_template_part(
    				'template-parts/loop/entry-summary/term/term',
    				$name,
    				array(
    					'_context' => $vars['_context'],
    					'_terms' => $vars['_terms'],
    				)
    			);
    			$terms = ob_get_clean();
    
    			return str_replace(
    				'
    
    ',
    				$terms . '
    
    ',
    				$html
    			);
    		}
    		return $html;
    	},
    	10,
    	3
    );
    0
    いいねをした人: 居ません
    #123138
    キタジマ タカシ
    参加者
    2253

    \Framework\Helper::get_template_part( 'template-parts/loop/entry-summary/term/term' ... ); はターム(カテゴリー等)の一覧を取得するものなので、「ここをカスタムフィールドを取得して HTML を生成・加工する」というコードに書き換えればよいのかなと思います。

    僕は ACF に詳しくないのと、実際に course_type にどのような値が入っているかがわからないのであくまでサンプルですが、だいたい下記のような感じになるのかなと思います。

    add_filter(
    	// template-parts/loop/entry-summary を書き換える
    	'snow_monkey_template_part_render_template-parts/loop/entry-summary',
    	function( $html, $name, $vars ) {
    		// 「シンプル」のときだけ実行
    		if ( 'simple' === $vars['_entries_layout'] ) {
    			// カスタムフィールドを取得して、それをもとに加工した HTML をバッファリングする
    			// ACF や実際に保存されているデータの構造がわからないので実際の状況にあわせて書き直してください。
    			$course_types = get_post_meta( get_the_ID(), 'course_type' );
    			ob_start();
    			foreach ( $course_types as $course_type ) {
    				echo '<span>' . $course_type . '</span>';
    			}
    			$course_type_html = ob_get_clean();
    
    			return str_replace(
    				'</section>',
    				$course_type_html . '</section>',
    				$html
    			);
    	},
    	10,
    	3
    );
    1
    いいねをした人:
    #123481
    akosan
    閲覧者
    31

    ありがとうございます。その後いろいろ調べながらやってみたのですが実現できず、とん挫しています。

    エラーメッセージが出たので

    }
    return $html;

    を追加してエラーは出なくなったのですが表示はできずでした。

    Advanced Custom Fieldsの関数get_fieldを使えばいいのでは?と思い変更したのですがそれではダメでした。※get_post_metaでも出来るようでしたが

    https://lucy.ne.jp/bazubu/advanced-custom-fields-36452.html

     

    add_filter(
    	// template-parts/loop/entry-summary を書き換える
    	'snow_monkey_template_part_render_template-parts/loop/entry-summary',
    	function( $html, $name, $vars ) {
    		// 「シンプル」のときだけ実行
    		if ( 'simple' === $vars['_entries_layout'] ) {
    			// カスタムフィールドを取得して、それをもとに加工した HTML をバッファリングする
    			// ACF や実際に保存されているデータの構造がわからないので実際の状況にあわせて書き直してください。
    			$course_types = get_field( 'course_type' );
    			ob_start();
    			foreach ( $course_types as $course_type ) {
    				echo '<span>' . $course_type . '</span>';
    			}
    			$course_type_html = ob_get_clean();
    
    			return str_replace(
    				'</section>',
    				$course_type_html . '</section>',
    				$html
    			);
    		}
    		return $html;
    	},
    	10,
    	3
    );
    0
    いいねをした人: 居ません
    #123547
    キタジマ タカシ
    参加者
    2253

    どこまでがうまくいっていて、どこからがうまくいっていないのかがわからないので、適当なところで var_dump() して問題を把握すると良いかもしれませんね。

    add_filter(
    	// template-parts/loop/entry-summary を書き換える
    	'snow_monkey_template_part_render_template-parts/loop/entry-summary',
    	function( $html, $name, $vars ) {
    		// 「シンプル」のときだけ実行
    		var_dump( $vars['_entries_layout'] );
    		if ( 'simple' === $vars['_entries_layout'] ) {
    			// カスタムフィールドを取得して、それをもとに加工した HTML をバッファリングする
    			// ACF や実際に保存されているデータの構造がわからないので実際の状況にあわせて書き直してください。
    			$course_types = get_field( 'course_type' );
    			var_dump( $course_types );
    			ob_start();
    			foreach ( $course_types as $course_type ) {
    				echo '<span>' . $course_type . '</span>';
    			}
    			$course_type_html = ob_get_clean();
    
    			var_dump( esc_html( $html ) );
    			return str_replace(
    				'</section>',
    				$course_type_html . '</section>',
    				$html
    			);
    		}
    		return $html;
    	},
    	10,
    	3
    );
    1
    いいねをした人:
    #123621
    akosan
    閲覧者
    31

    キタジマさん

    ありがとうございます。やってみます。

    うまく行ったコードを書きこむためこちらはまだ空けておきます。

    2
    いいねをした人:
    #126626
    akosan
    閲覧者
    31

    こちら解決しました。ラベルが表示されない原因は

    ページ速度最適化→get_template_part() を拡張する

    これが無効化されていたことが原因でした。わからず色々やっていたのですが根本的なところが原因でした申し訳ありません。

    ※キタジマさんがTwitterでもシェアされていました

    1
    いいねをした人:
    #126627
    akosan
    閲覧者
    31

    解決したのでトピックを閉じます。

    1
    いいねをした人:
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • トピック「任意のタクソノミーの投稿一覧にカスタムフィールドの値を表示させたい」には新しい返信をつけることはできません。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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