2015-11-06 44 views
2

我試圖在網站的每個頁面上的側欄中顯示從圖庫中的6個隨機圖像。從其他圖庫中獲取隨機圖像

這是我的代碼,但我不能得到顯示的縮略圖鏈接!

$args = array('post_id' => '7', 'post_type' => 'attachment', 'numberposts' => 6, 'orderby' => 'rand'); 

     $attachments = get_posts($args); 

     if ($attachments) { 

      foreach ($attachments as $attachment) { 

       $attachment_id = $attachment(); 

       print_r($attachment()) 

       echo '<a href="' . wp_get_attachment_url() . '"><img src="' . wp_get_attachment_image_src($attachment_id) . '" /></a>'; 

     } 

    } 
+0

http://php.net/manual/en/function.error-reporting.php和視圖您的HTML源代碼。 –

+0

您正在嘗試使用作爲可執行函數傳遞的變量。 http://php.net/manual/en/functions.variable-functions.php –

回答

3

您的查詢是錯誤的。您正在撥打$attachment() as和id(?!)。當您在foreach循環中執行$attachmentprint_r時,您可以看到它們明顯是對象。因此,您需要通過參考->See here about OOP more所需的值來獲取每個對象的ID。

$args = array(
    'post_id' => '7', 
    'post_type' => 'attachment', 
    'numberposts' => 6, 
    'orderby' => 'rand' 
    ); 

$attachments = get_posts($args); 

if ($attachments) { 
    foreach ($attachments as $attachment) { 
     $attachment_id = $attachment->ID; 
     $image = wp_get_attachment_image_src($attachment_id); 
     if (!empty($image)) { 
      $image_url = $image[0]; 
     } 
     echo '<a href="' . wp_get_attachment_url($attachment_id) . '"><img src="' . $image_url . '" /></a>'; 
    } 
} 

wp_reset_postdata(); 

另外,wp_get_attachment_image_src()返回一個包含

[0] => url 
[1] => width 
[2] => height 
[3] => boolean: true if $url is a resized image, false if it is the original or if no image is available. 

自認爲是一個數組的數組,我經常檢查,如果它不是空的(爲了安全起見)。

查詢後總是做wp_reset_postdata();

就是這樣。

說明在稍微詳細

所以你在這裏做一個簡單的查詢。您希望獲得與您在$args陣列中設置的參數相匹配的帖子。你可以用它做很多。 Clicky here

該查詢的功能是什麼,它會返回與您的查詢參數相匹配的帖子。它返回的是array of objects。所以如果你想訪問它們中的每一個,你需要通過loop。爲此,有foreach循環。

Foreach將遍歷數組中的每個項目,並且您將能夠以$attachment(就您的情況而言)訪問它。您可以循環任何類型的數組。一個簡單的數組,一個多維數組,一個包含對象的數組等等。

所以,我們說你的查詢將返回一個objects(數組)的列表。在你的foreach循環內,$attachment就是那個單一的對象。一般來說,對象是一件可以包含很多東西的東西。描述該對象的屬性,將使該對象執行某些操作的方法(對象中的函數)等。

Ours對象相對簡單。它包含諸如ID, post_author, post_name, post_type, post_title等屬性。基本上,你需要找到關於你的文章的信息。

在我們的foreach,如前所述,你引用一個對象與$attachment,你可以得到的價值是通過引用他們像

$attachment->ID 

這是各種屬性將返回ID的價值屬性。如果你想獲得帖子標題,你會參考

$attachment->post_title 

等等。

因此,我們已將該ID分配給名爲$attachment_id的變量。現在我們可以隨心所欲地使用它,例如wp_get_attachment_image_src()等各種wordpress功能。

你需要知道你會得到什麼了查詢,並在循環中,所以它總是好主意,當你開發的東西,到print_r()你會得到什麼。

另外,請記住,foreach將循環通過帖子一個接一個。因此,即使您的print_r($attachment)返回了一堆帖子,也只是意味着它多次(在您的案例中是6次,因爲您的查詢只返回6個帖子)並將其打印出來。它會全部粘在一起,所以你會想:但是等等,這個foreach會返回大量的東西。如何獲得唯一的東西? 但只記得foreach循環內的代碼是指你的陣列的一個實例,以及的foreach就會像:

item 1 
| 
v 
do stuff with it... 
| 
v 
done (output or whatever you are doing in foreach) 
| 
v 
more items? 
| 
v 
YES! 
| 
v 
move to item 2 
| 
v 
do same stuff with it 
| 
v 
done 
| 
v 
more items? 
| 
v 
YES! 
| 
v 
move to item 3 
. 
. 
. 
| 
v 
more items? 
| 
v 
NO :( 
| 
v 
exit loop 

這是如何的foreach的作品,所以不要害怕它:d

我已經有點偏離軌道,但我希望這可以幫助別人的未來以及:)

+0

解釋對於未來的讀者來說會很好。 –

+0

我加了,我只是不想放鬆答案中的第一位;) –

+0

哈哈哈! gotcha ;-)讓我們來看看OP現在要說些什麼。 *乾杯* –