-
投稿者投稿
-
2023年5月14日 2:36 PM #123012
【お使いの 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いいねをした人: 居ません2023年5月15日 11:05 AM #123138\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 );
2023年5月20日 4:14 AM #123481ありがとうございます。その後いろいろ調べながらやってみたのですが実現できず、とん挫しています。
エラーメッセージが出たので
}
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いいねをした人: 居ません2023年5月22日 3:11 AM #123547どこまでがうまくいっていて、どこからがうまくいっていないのかがわからないので、適当なところで
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 );
2023年5月23日 10:43 AM #1236212023年6月19日 1:37 PM #1266262023年6月19日 1:38 PM #126627 -
投稿者投稿
- トピック「任意のタクソノミーの投稿一覧にカスタムフィールドの値を表示させたい」には新しい返信をつけることはできません。