WP_QUERY结果存储在变量中

时间:2016-02-10 作者:C. Ruben

我想知道是否有一种方法可以将WP\\U查询结果存储在变量中,然后我可以继续将这些变量插入到页面上循环之外的任何位置。例如,假设我想获得三篇最新文章的特征图像URL,并且我想以类似于下面的方式设置变量。(请注意,下面的代码仅用于说明,因为我不知道如何解析每个帖子的循环结果)

$featureImageFirst = wp_get_attachment_url();
$featureImageSecond = wp_get_attachment_url();
$featureImageThird = wp_get_attachment_url();
为了响应Soren的帮助,我做了以下工作:

嗨,索伦,请看一下我的代码。这就是正在发生的事情。

    <?php
    // Get latest three posts
    $args = [ 
        \'posts_per_page\' => 3,
        \'orderby\'      => \'date\',
        \'order\'    => \'DESC\'
    ];

    // Fetch posts
    $query = new WP_Query( $args );

    if( $query->have_posts() )
    {
        while ( $query->have_posts() )
        {
            $query->the_post(); 
            $featureImage[$current_post] = wp_get_attachment_url(     get_post_thumbnail_id() );
        }
    }
    ?>
<div><img src="<?php echo $featureImage[0]; ?>"></div>
这就是我得到的

<div><img src></div>

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

从我读到的内容来看,您可以看到帖子缩略图的URL/路径是一个数组。我们需要考虑以下几点,使其尽可能精简和可预测

重要注意事项我们确实需要一些方法来确保我们获得最新的三篇文章,这些文章实际上有缩略图,以避免意外的输出和错误。用这样一种心态编码总是很重要的:我的代码会被黑客攻击,它会失败,它会有bug。一旦你有了这种心态,那么你就从不同的角度来看待你的代码,这让你提出这样的问题:如果这段特定的代码返回了一个错误,它将如何影响我的输出,我将如何以预期的、可预测的方式安全可靠地处理这些错误,而不破坏我网站上的其他内容

我们只需要三篇最新帖子的帖子ID,所以为了节省资源,为什么不只查询帖子ID

当您需要精简、无分页、直截了当的查询时,我总是使用get_posts 因为它在法律上破坏了分页。这使您的查询速度更快,这对有许多帖子的网站非常有帮助。你仍然可以使用WP_Query, 但是你需要记住通过\'no_found_rows\' => true 到您的查询参数(,这正是get_posts 顺便说一句)。另一个plus使用get_posts 它只是返回$posts 来自WP_Query 例子但这只是个人喜好

代码我更喜欢为长代码编写函数,以使我的模板尽可能简单和简短。然后我可以在需要的地方调用我的函数,甚至可以使用它们do_action() 调用我的模板,然后将我的函数挂接到该特定操作

无论如何,让我们看看函数;(NOTE: 以下内容未经测试,需要PHP 5.4以上版本,可以根据需要使其更加动态

function get_latest_post_thumbnails_urls()
{
    // Set an empty variable which will hold our array of URL\'s
    $output = [];

    // Set our query args
    $args = [
        \'posts_per_page\' => 3,
        \'fields\'         => \'ids\', // Only get post ID\'s
        \'meta_query\'     => [ // Get posts which has thumbnails only
            [
                \'key\'     => \'_thumbnail_id\',
                \'compare\' => \'EXISTS\'
            ]
        ],
        // Any additional parameters you might need
    ];
    $q = get_posts( $args );

    // ALWAYS make sure we have posts, else return $output
    if ( !$q )
        return $output;

    // Ok, we have posts, lets loop through them and create an array of URL\'s
    foreach ( $q as $id ) 
        $output[] = wp_get_attachment_url( get_post_thumbnail_id( $id ) );

    // Return our array
    return $output;
}
我们现在可以使用get_latest_post_thumbnails_urls(); 任何我们需要的地方。

用法我们需要记住,我们的函数可能会返回一个空数组,或者返回一个包含1、2或3个URL的数组,因此在尝试使用任何东西来避免错误和意外故障之前,我们必须始终确保这一点

这可能是我们可以使用的安全用例

$urls = get_latest_post_thumbnails_urls();
// Make sure we do not have an empty array

if ( $urls ) {
    foreach ( $urls as $url ) {
        // Do something with your thumbnail url
        echo $url . \'</br>\'; // For testing, remove this
    }
}

SO网友:Sören Wrede

A) 可以将url存储在数组中。当前显示的帖子索引为$current_post. 因此,您还可以将其用作数组索引。

if ( have_posts() ) : while ( have_posts() ) : the_post(); 
    if ( has_post_thumbnail() ) {
        $featureImage[$current_post] = wp_get_attachment_url( get_post_thumbnail_id() );
    }
    endwhile;
endif;
循环完成后,您有:

$featureImage[0] (value: http://example.org/thumbnail_of_post_1.jpg)

$featureImage[1] (value: http://example.org/thumbnail_of_post_2.jpg)

$featureImage[2] (value: http://example.org/thumbnail_of_post_3.jpg)
B) 您可以在一个页面上使用多个查询。看见here 在法典中。