こんにちわ、mae-telさん
簡単に書いてみました。説明はコードの所にコメントで記載しています。
正直、関数化かクラス化とかした方が扱いやすくなると思いますので、ご自由にカスタマイズしてください。
// ポストタイプを指定
$posttype = 'post';
// タームをごにょごにょ
$taxonomy = 'category';
$types = get_the_terms( $post->ID, $taxonomy );
$typenames = array();
foreach( $types as $type ){
array_push( $typenames, $type->slug );
}
// 記事の取得条件を設定
$args = array(
'showposts' => '1',
'orderby' => 'rand',
'post_type' => $posttype,
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'terms' => $typenames,
'field' => 'slug',
'operator' => 'IN'
),
'relation' => 'AND'
),
);
// 変数を破棄
unset( $posttype );
unset( $taxonomy );
unset( $types );
unset( $typenames );
unset( $type );
// 記事を表示する為のサブループ
query_posts($args);
if ( have_posts() ) : while ( have_posts() ) : the_post();
// 好きにコーディングしてください
the_title();
endwhile; else:
// 記事がない場合
// 好きにコーディングしてください
endif;
// クエリーをリセット
wp_reset_query();
// 変数を破棄
unset( $args );
自分でコード書いといてあれですけど、query_posts 使わないで get_posts を使って foreach でループさせればいいかもです。query_posts の方がメインループの書き方と同じで分かり易いので好きなんですけどね。
KUCKLU様、ご回答ありがとうございます!
ご教授いただいたコードを、参考に(そのまま)させていただきました。
取得したタームに属する記事のカスタムフィールドに、画像は入っているのですが、
入っていない場合の
<li></li>
が表示されてしまいます。
カスタムフィールドの取得の仕方が問題なのでしょうか?
<?php
$posttype = 'ポストタイプ名';
$taxonomy = 'タクソノミー名';
$types = get_the_terms( $post->ID, $taxonomy );
$typenames = array();
foreach( $types as $type ){
array_push( $typenames, $type->slug );
}
?>
<?php
$args = array(
'showposts' => '1',
'orderby' => 'rand',
'post_type' => $posttype,
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'terms' => $typenames,
'field' => 'slug',
'operator' => 'IN'
),
'relation' => 'AND'
),
);
// 変数を破棄
unset( $posttype );
unset( $taxonomy );
unset( $types );
unset( $typenames );
unset( $type );
?>
<?php
// 記事を表示する為のサブループ
query_posts($args);
if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<img src="<?php the_field('取得したいカスタムフィールドキー・返り値はURL)'); ?>" alt="" />
<?php endwhile; else: ?>
// 記事がない場合
// 好きにコーディングしてください
<li></li>
<?php endif; ?>
<?php
// クエリーをリセット
wp_reset_query();
// 変数を破棄
unset( $args );
?>
<li></li>
が表示されるということは記事が取得できていないです。
なので、カスタムフィールは関係がありません。
query_posts($args); の前で var_dump($args);としてみて、中身が正しく入っているか確認してみてください。
KUCKLU様
すみません…。
完全に見間違いをしてしまっていて、
<li></li>
の出力はされていませんでした。
結果的に、何も出力されていない状態でした。申し訳ありません。。
var_dump($args);を入れてみた結果、以下が表示されました。
array(4) { ["showposts"]=> string(1) "1" ["orderby"]=> string(4) "rand" ["post_type"]=> string(16) "カスタムポスト名" ["tax_query"]=> array(2) { [0]=> array(4) { ["taxonomy"]=> string(20) "タクソノミ―名" ["terms"]=> array(1) { [0]=> string(11) "タームのスラッグ" } ["field"]=> string(4) "slug" ["operator"]=> string(2) "IN" } ["relation"]=> string(3) "AND" } }
タームやカスタム投稿タイプやタクソノミはちゃんと取得できているよう(?)ですが・・・
<li></li>
の出力はされていませんでした。
結果的に、何も出力されていない状態でした。申し訳ありません。
そうなると記事は取得できていると思います。
試しに the_title() などでちゃんと取得できているか確認してみるといいかもしれません。
KUCKLU様、度々のご教授ありがとうございます。
the_title();で出力してみたところ、タームに属する記事はちゃんと取得できているようです。
ブラウザを更新するたびに違うタイトルがひとつずつランダムで表示されています。
となるとやはりカスタムフィールドの出力でしょうか…?汗
画像のカスタムフィールドは他の出力方法があるのでしょうか?
何度もすみません…><
ACF での the_field 関数の使い方が間違っていたりしませんでしょうか。
以下のコードで試してみていただけますでしょうか?
※hogehoge の部分はご自身で設定した値に変更してください。
<img src="<?php the_field( 'hogehoge', $post->ID ); ?>" alt="" />
公式ドキュメント
ACF { the_field()
KUCKLU様、
$post->IDを追加しなければいけなかったのですね・・・!
無事、表示することができました。
KUCKLU様、大変お世話になりました!
解決に導いていただき、ありがとうございました。