2013-04-28 54 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

相關問題