現在の記事の関連記事をtag_ID
で出力しようとしています。現在のコードでは、postsはすべての投稿を特定のタグではなくproperty
タグから出力します。
現在の投稿tag_ID
に基づいて投稿を返す方法を教えてください。
<?php $post_tag = get_the_tags($post->ID)?>//Not sure if correct
<?php
$args = array(
'post_type' => 'property',
'tag' => $post_tag,
);
$related_posts = new WP_Query( $args );
?>
<?php while ( $related_posts -> have_posts() ) : $related_posts -> the_post(); ?>
<h2><?php echo get_the_title()?></h2>
//etc
<?php endwhile; wp_reset_query(); ?>
解決策: 最善の解決策ではないかもしれませんが、city
内の関連する投稿と現在の投稿タグをクエリすることができます。
$tags = wp_get_post_terms( get_queried_object_id(), 'city', ['fields' => 'ids'] );
// Now pass the IDs to tag__in
$args = array(
'post_type' => 'property',
'post__not_in' => array( $post->ID ),
'tax_query' => array(
array(
'taxonomy' => 'city',
'terms' => $tags,
),
),
);
$related_posts = new WP_Query( $args );
get_the_tags()
は、名前、IDなどのタグの配列を返します。 IDだけを配列に格納し、それをクエリに使用する必要があります。
$post_tag = get_the_tags ( $post->ID );
// Define an empty array
$ids = array();
// Check if the post has any tags
if ( $post_tag ) {
foreach ( $post_tag as $tag ) {
$ids[] = $tag->term_id;
}
}
// Now pass the IDs to tag__in
$args = array(
'post_type' => 'property',
'tag__in' => $ids,
);
// Now proceed with the rest of your query
$related_posts = new WP_Query( $args );
また、wp_reset_postdata();
を使用している場合は、wp_reset_query();
の代わりにWP_Query();
を使用してください。
@birgireが指摘するように、WordPressは wp_list_plunk()
functionと同じ機能を持つ、行内の各オブジェクトの特定のフィールドを抽出する array_column()
関数を提供します。
それで、これを変えることができます:
// Define an empty array
$ids = array();
// Check if the post has any tags
if ( $post_tag ) {
foreach ( $post_tag as $tag ) {
$ids[] = $tag->term_id;
}
}
これに:
// Check if the post has any tags
if ( $post_tag ) {
$ids = wp_list_pluck( $post_tag, 'term_id' );
}