从其他图库中获取随机图像

时间:2015-11-06 12:40:49

标签: php wordpress

我正在尝试在网页每个页面的侧边栏中的第7页上的图库中显示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>';

        }

    }

1 个答案:

答案 0 :(得分:3)

您的查询错误。您正在调用$attachment() as和id(?!)。当您在foreach循环中执行print_r $attachment时,您可以看到它们显然是对象。因此,您需要通过-> 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就是那个单一的对象。一般来说,对象是一个可以包含很多东西的东西。描述该对象的属性,方法(对象中的函数)将使该对象执行某些操作(如果需要)等。

我们的对象相对简单。它包含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

我走了一段路,但我希望这对未来的某些人也有帮助:))