質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

2536閲覧

WordpressのタクソノミーでACFの関連(relation)を使った場合の表示方法(シングルページ)

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/12/06 11:54

編集2017/12/06 13:27

メディアサイトを作成しています。
基本的には同じ作者に書いてもらうようにしているのですが、イレギュラーで連載の中で別の作者の名前を入れられるような仕組みを作りたいと考えています。

基本的な作者は同じなので、タクソノミーに設定している関連の内容を固定で表示させたいと思っています。

###前提・実現したいこと
0. カスタム投稿タイプarticleとauthorを作成
0. articleのシングルページとarticleのタクソノミーを作成し、どっちにもACFの関連を入れてauthorの情報を指定できるようにする
0. シングルページで指定した関連(author)の内容を優先的に表示
0. シングルページで指定がない場合は、タクソノミーで指定している関連(author)の内容を表示

ちなみに、作者はいるのですが原稿をいただいてこちらで入れ込む形なのでユーザーアカウントを作るというのは避けたいです。

###発生している問題・エラーメッセージ
色々と調べて試してみているものの、どれも方法として違っていて手詰まり感があり、エラーとかいう問題ではなくそもそも論でいい方法があれば提案していただきたいです。

<?php $ctm = get_post_meta($post->ID, 'author', true);?> <?php if(empty($ctm)):?> ここに入れるソースが思いつきません <?php else : ?> <?php $author = get_field('author'); ?> <?php if($author): ?> <p id="mainDescriptionAutor">著者: <?php foreach((array)$author as $value):?> <a href=""><?php echo $value->post_title; ?></a> <?php endforeach; ?> </p> <?php else: ?> <?php endif; ?> <?php endif;?>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/06 12:45

「前提・実現したいこと」にACFの「関連」を使用すると書かれているため、方針はおおむね既に決まっているようですが、どこで詰まっているのでしょうか。
退会済みユーザー

退会済みユーザー

2017/12/06 13:29

いつもありがとうございます。先ほどコードを追加しました。シングルページのauthorの部分が未入力の場合タクソノミーのauthorを呼び出すようにしたいのですが、タクソノミーの部分のソースコードが一切思いつかず・・・
guest

回答2

0

ベストアンサー

get_the_terms関数で、特定の投稿が持っているタームを取得することができます。
それから、get_term_meta関数でタームのメタ情報を取得表示するイメージでしょうか。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_terms
https://developer.wordpress.org/reference/functions/get_term_meta/


2017/12/16 追記
ACFプラグインでタクソノミーにカスタムフィールドを設定した場合のカスタムフィールド値を取得するソースです。
注意点はACFのタクソノミーのカスタムフィールド値を取得するときにはWordPressのget_term_meta関数が使えないらしいこと。
かわりにACFのget_filed関数で取得する必要があります。
詳細は公式のドキュメントに「Adding fields to a taxonomy term」ページがあるので、そちらをご参照ください。

PHP

1$taxonomy_name = "article_taxonomy"; 2$customfield_name = "field_name"; 3 4$terms = get_the_terms(get_the_ID(), $taxonomy_name); 5 6var_dump($terms); 7 8if($terms) : 9 foreach($terms as $term) : 10 $objs = get_field($customfield_name, $taxonomy_name."_".$term->term_id); 11 12 var_dump($objs); 13 14 if(objs) : 15 foreach($objs as $obj) : 16 echo $obj->post_title; 17 endforeach; 18 endif; 19 endforeach; 20endif;

参考URL:
ACF | Adding fields to a taxonomy term
https://www.advancedcustomfields.com/resources/adding-fields-taxonomy-term/

投稿2017/12/06 15:17

編集2017/12/16 06:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/06 15:46

get_the_termsでというところまではわかったのですが、それ以降の手が思いつかず・・・という感じで、mizさんが言われているイメージでやりたいです
退会済みユーザー

退会済みユーザー

2017/12/07 10:10

(1)get_the_terms関数でタームIDを取得、(2)get_term_meta関数のパラメーターに取得したタームIDを設定する、という順番ではうまくいきませんか。
退会済みユーザー

退会済みユーザー

2017/12/11 07:18

単純に画像を出力するなどならできるのですが、関連(relationship)を使うとなると、どうやればいいのかわからなくなってしまっている状態です。
退会済みユーザー

退会済みユーザー

2017/12/11 17:21

「関連」といっても特別難しく考える必要はないはずです。 get_term_meta(タームID, カスタムフィールド名)のような形で実行することで「関連」型のカスタムフィールドで紐づけたデータがとれてくると思います。 var_dumpなどでどのようなデータが取れたのかを表示させて確かめてみると理解しやすいかもしれません。 (回答文へは後ほど詳細を追記します)
退会済みユーザー

退会済みユーザー

2017/12/12 23:23

ありがとうございます。引き続き自分でもやってみようと思っていますが、もし方法を教えていただければ嬉しいです。。。 よろしくお願いします。
guest

0

mizさんの方法で色々と考えてなかなかうまくいかなかったので、
下記の方法で解決しました。

もし他にいい方法があれば教えていただければ嬉しいです。
また、ソースのコピペができなかったので、間違っているところがあるかもです。

<?php $ctm = get_post_meta($post->ID, 'author', true);?> <?php if(empty($ctm)):?> <?php $term_sp = get_the_terms($post -> ID, 'articlecat' ); foreach($term_sp as $term_s){ $term_id = $term_s->term_id; $term_name = $term_s->name; break; } $term_sp = get_the_terms( $post->ID, 'articlecat'); foreach($term_sp as $term_s){ $term_id = $term_s->term_id; $term_name = $term_s->name; break; } $term_idsp = 'articlecat_'.$term_id; $author =get_field('cat_author', $term_idsp); if($author): ?> <?php foreach($author as $post): <?php setup_postdata($post);> <a href=""><?php the_title(); ?> </a> <?php endforeach; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> <?php else : ?> <?php $author = get_field('author'); ?> <?php if($author): ?> <p id="mainDescriptionAutor">著者: <?php foreach((array)$author as $value):?> <a href=""><?php echo $value->post_title; ?></a> <?php endforeach; ?> </p> <?php else: ?> <?php endif; ?> <?php endif;?>

投稿2017/12/15 08:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問