从其他库中随机获取图像


Get random images from another gallery

我正试图在网站每一页的侧边栏中的第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>';
        }
    }

您的查询是错误的。您正在以和id(?!)调用$attachment()。当您在foreach循环中执行$attachmentprint_r时,您可以看到它们显然是对象。因此,您需要通过使用->引用所需的值来获得每个对象的id。请参阅此处了解OOP的更多信息。

$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数组中设置的一些参数相匹配的帖子。你可以用它做很多事情。点击这里。

该查询的作用是,它返回与查询参数匹配的帖子。它返回的是一个对象数组。因此,如果你想访问它们中的每一个,你需要循环通过它。为此,有foreach循环。

Foreach将遍历数组中的每一项,并且您将能够以$attachment的形式访问它(在您的情况下)。您可以循环任何类型的数组。简单数组、多维数组、包含对象的数组等

因此,我们已经说过,您的查询将返回一个对象列表(数组)。在foreach循环$attachment中,只有一个对象。一般来说,对象是一个可以包含很多东西的东西。描述该对象的属性,使该对象执行某些操作的方法(对象中的函数),等等。

我们的目标相对简单。它包含ID, post_author, post_name, post_type, post_title等属性。基本上,你所需要的就是找到关于你的帖子的信息。

如前所述,在我们的foreach中,您使用$attachment引用单个对象,您可以通过像一样引用它们来获得它的各种属性的值

$attachment->ID

这将返回CCD_ 12属性的值。如果你想获得帖子标题,你会参考

$attachment->post_title

等等。

因此,我们将该ID分配给了名为$attachment_id的变量。现在我们可以随心所欲地使用它,例如wp_get_attachment_image_src()之类的各种wordpress功能。

你需要知道你从查询和循环中得到了什么,所以当你开发东西时,print_r()总是一个好主意。

此外,请记住foreach将逐个循环遍历帖子。因此,即使您的print_r($attachment)返回了一堆帖子,也只意味着它多次这样做(在您的情况下是6次,因为您的查询只返回了6个帖子),并将其打印出来。它会被"粘"在一起,所以你会想:但等一下,这个前臂会回很多东西。如何只得到单一的东西?但请记住,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

我有点偏离了轨道,但我希望这对未来的人也有帮助:)