2013-04-28 198 views
3

将WordPress帖子作为纯数据结构使用有什么窍门?使用API​​的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'); 

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

回答

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和使用custom select query只有当没有办法让使用WordPress的方式所期望的结果。关于WP_Query vs query_posts() vs get_posts()有一个很好的答案,请阅读以获得更好的理解。

+2

这是正确的。在某些情况下可以使用wpdb,但是WP_Query是蜜蜂为所有事情而屈膝。它有你需要有效使用帖子的所有东西。该循环基本上是基于WP_Query构建的,但是如Sheikh所建议的那样使用它将允许在没有WPDB缺点的情况下进行定制。 – rncrtr 2013-04-29 02:19:57

+0

WP_Query的结果是一个WP_Post对象的数组,这是朝着正确方向迈出的一步,但他们似乎还没有永久链接。从这个对象中,我如何获得一个帖子的URL?那么帖子的自定义字段又如何?这些字段似乎也不在对象之上。 – Deane 2013-04-29 13:28:03

+0

我发现它:get_permalink($ post-ID)。我仍然不明白为什么这不能成为对象的财产。此外,我发现虚拟属性会为您提供元数据 - 只需将它们存在即可:$ post-> my_custom_field_name。 – Deane 2013-04-29 14:34:25

相关问题