3

将 WordPress 帖子作为纯数据结构使用的诀窍是什么?

传统上,您使用“循环”并通过以下函数输出数据:

<?php the_title(); ?>
<?php the_content(); ?>

这些函数将文本直接转储到响应中。

使用 $wpdb,我可以取回一组这样的帖子:

$posts = $wpdb->get_results("SOME SQL HERE", OBJECT);

然后我得到一组 stdClass 对象,我猜它们是......后置。它们具有“post_title”等属性,但没有固定链接,这让我认为这不是要使用的“正确” Post 对象。此外,“post_content”不是完整的 HTML——它仍然有换行符等。

在迭代这个数组时,我发现我必须这样做:

foreach ($events as $post)
{
   setup_postdata($post);
   ...

这将该帖子置于全球范围内。然后我可以使用上述函数写出内容,并使用这样的函数来获取元数据:

$display_date = get_custom_field('display_date');

有没有更好的办法?这看起来……很奇怪。有没有办法将帖子完整表示为一个对象,包含所有元数据,以及我需要从数据级别操作它的所有其他内容,而不仅仅是假设我想将输出转储到响应中?

4

1 回答 1

1

您可以改用WP_Query,就像

$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
    echo '<li>' . get_the_title() . '</li>';
endwhile;

您只需准备$args参数数组即可进行自定义查询,例如,您可以使用

// Display posts that have "books" tag
$the_query = new WP_Query( 'tag=books' );

或者

// Display posts that have these categories
$the_query = new WP_Query( 'category_name=event,news' );

或更复杂的一个

// Display posts tagged with bob, under people custom taxonomy
$args = array(
    'post_type' => 'post',
    'people' => 'bob'
);
$the_query = new WP_Query( $args );

您也可以使用query_posts但它与WP_Query有点不同,您也可以使用get_post并仅在无法使用 WordPress 的方式获得所需结果时使用自定义选择查询。关于WP_Query vs query_posts() vs get_posts()有一个很好的答案,请阅读此内容以获得更好的理解。

于 2013-04-29T02:13:56.157 回答