列出具有通用自定义字段值的帖子

时间:2012-11-27 作者:user24126

您好,我正在尝试创建一个帖子列表,这些帖子的公共自定义字段值与它们显示的帖子的自定义字段值相同。我已经找到了一些具体值的示例,但我正在寻找一个常见值的示例。因此,它可能类似于为这篇文章找到公共字段的值,然后显示一个具有与这篇文章具有相同值的自定义字段的文章列表(带有指向该文章的链接)。但不要将此帖子(显示它们的帖子)包含在列表中。谢谢

1 个回复
SO网友:Johannes Pille

基于当前帖子元数据检索和列出帖子,假设自定义字段保存为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();

结束

相关推荐