基于当前帖子元数据检索和列出帖子,假设自定义字段保存为Posteta:
global $post; // current post displayed
/* grab the value of the custom field for the current post */
$custom_field_value = get_post_meta( $post->ID, \'custom-field-name\', true );
/* fetch all posts with the same value for the custom field */
$args = array(
\'post_per_page\' => -1,
\'meta_key\' => \'custom-field-name\',
\'meta_value\' => $custom_field_value,
\'post__not_in\' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
/* loop through related posts */
while ( $related_posts->have_posts() ) : $related_posts->the_post();
echo \'<li>\' . get_the_title() . \'</li>\';
/* or do something else */
endwhile;
wp_reset_postdata();
通过第二个元数据集扩展上述内容并链接到帖子,根据下面的最新评论,您希望限制另一个自定义字段值或元数据集分别显示的帖子数量。此外,您还希望帖子列表链接到帖子。
有关链接,请参见get_permalink()
作用
我不太明白\'other-meta-key\'
应设置为\'yes\'
在当前帖子或检索到的帖子上。在第一种情况下,您可以使用注释中的条件并将所有内容包装在其中(除了第一行,global $post;
), 因为其他一切都是多余的。
如果\'yes\'
应该是检索到的帖子的一个元值,您自己建议的通过在循环中添加条件来处理第二个元值的方法也会很有效,但不是最有效的解决方案。这样,您就可以检索到比您需要的更多的帖子,并遍历比您想要显示的更多的帖子。将此条件也合并到查询中,并仅从数据库中获取所需的帖子,这样效率更高。你是否真的会注意到性能上的差异取决于我们处理的帖子数量。
无论如何,我们开始:
global $post; // current post displayed
/* grab the value of the custom field for the current post */
$custom_field_value = get_post_meta( $post->ID, \'custom-field-name\', true );
/* fetch all posts with the same value for the custom field
* and \'yes\' for the second field */
$args = array(
\'post_per_page\' => -1,
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'custom-field-name\',
\'value\' => $custom_field_value
),
array(
\'key\' => \'other-meta-key\',
\'value\' => \'yes\'
)
),
\'post__not_in\' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
echo \'<ul>\';
/* loop through related posts,
* note that within the loop, the $post object is not the same as above */
while ( $related_posts->have_posts() ) : $related_posts->the_post();
echo \'<li><a href="\' . get_permalink( $post->ID ) . \'">\' .
get_the_title() .
\'</a></li>\';
endwhile;
echo \'</ul>\';
wp_reset_postdata();