使用WordPress帖子作为纯数据结构的诀窍是什么?
传统上,您使用“The Loop”并通过以下函数输出数据:
<?php the_title(); ?>
<?php the_content(); ?>
这些函数将文本直接转储到响应中。
使用$ wpdb,我可以获得这样的帖子数组:
$posts = $wpdb->get_results("SOME SQL HERE", OBJECT);
然后我得到一个stdClass对象的数组,这些对象是...... Post-ish,我猜。它们具有“post_title”等属性,但是没有永久链接,这让我觉得这不是“正确的”Post对象。此外,“post_content”不是完整的HTML - 它仍然有换行符等。
迭代这个数组时,我发现我必须这样做:
foreach ($events as $post)
{
setup_postdata($post);
...
这使该帖子在全球范围内。然后我可以使用上述函数来编写内容,并使用这样的函数来获取元数据:
$display_date = get_custom_field('display_date');
有更好的方法吗?这看起来很奇怪。有没有办法将帖子完整地表示为一个对象,包含所有元数据,以及我需要从数据级别操作它的所有其他内容,而不是仅仅假设我想将输出转储到响应中?
答案 0 :(得分: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
arguments数组以进行自定义查询,例如,您可以使用
// 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并仅在无法获取时才使用custom select query使用WordPress的方式获得所需的结果。关于WP_Query vs query_posts() vs get_posts()有一个很好的答案,请阅读此内容以便更好地理解。