从媒体库中获取所有图像ID

时间:2014-06-11 作者:user54045

我对PHP相当陌生,我相信这是一个相当基本的问题。我花了几个小时寻找答案,但似乎还没有找到正确的答案。因此,任何帮助都将不胜感激。

我正在尝试在我的网站上创建一个图库页面,其中自动包含任何新上载的图像。我的最终计划是使用合理的图像网格作为我的库管理器。这需要将图像ID放入JIG短代码中。在我的模板页面中,我想首先从媒体库中获取所有图像ID。第二个-调用JIG快捷码并插入ID作为库图像。从那里我将设置过滤内部夹具。

据我所知,我无法直接从wordpress获取图像ID。我必须先获取他们的URL,然后提取他们的ID。如果有更有效的方法,请让我知道。

到目前为止,我有这段代码来获取所有图像URL(从本讨论中:Get All Images in Media Gallery?):

$query_images_args = array(
    \'post_type\' => \'attachment\', \'post_mime_type\' =>\'image\', \'post_status\' => \'inherit\', \'posts_per_page\' => -1,
);

$query_images = new WP_Query( $query_images_args );
$images = array();
foreach ( $query_images->posts as $image) {
    $images[]= wp_get_attachment_url( $image->ID );
}
当我打印阵列时,这可以很好地工作。

接下来,我将使用以下代码从URL返回图像ID(从https://philipnewcomer.net/2012/11/get-the-attachment-id-from-an-image-url-in-wordpress/):

function pn_get_attachment_id_from_url( $attachment_url = \'\' ) {

global $wpdb;
$attachment_id = false;

// If there is no url, return.
if ( \'\' == $attachment_url )
    return;

// Get the upload directory paths
$upload_dir_paths = wp_upload_dir();

// Make sure the upload path base directory exists in the attachment URL, to verify that we\'re working with a media library image
if ( false !== strpos( $attachment_url, $upload_dir_paths[\'baseurl\'] ) ) {

    // If this is the URL of an auto-generated thumbnail, get the URL of the original image
    $attachment_url = preg_replace( \'/-\\d+x\\d+(?=\\.(jpg|jpeg|png|gif)$)/i\', \'\', $attachment_url );

    // Remove the upload path base directory from the attachment URL
    $attachment_url = str_replace( $upload_dir_paths[\'baseurl\'] . \'/\', \'\', $attachment_url );

    // Finally, run a custom database query to get the attachment ID from the modified attachment URL
    $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = \'_wp_attached_file\' AND wpostmeta.meta_value = \'%s\' AND wposts.post_type = \'attachment\'", $attachment_url ) );

}

return $attachment_id;
}
对于一个URL来说,这很好。我不知道的是如何循环遍历$images数组返回的所有URL并返回所有ID。有人能帮我解决这个问题吗?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

据我所知,我无法直接从wordpress获取图像ID。我必须先获取他们的URL,然后提取他们的ID。如果有更有效的方法,请让我知道。

我不确定我是否了解你,但你是否尝试过:

$ids = get_posts( 
    array(
        \'post_type\'      => \'attachment\', 
        \'post_mime_type\' => \'image\', 
        \'post_status\'    => \'inherit\', 
        \'posts_per_page\' => -1,
        \'fields\'         => \'ids\',
    ) 
);
$images = array();
foreach ( $ids as $id )
    $images[]= $id;

print_r( $images );
在哪里$images 应包含所有图像的ID。

例如:

Array
(
    [0] => 3299
    [1] => 3298
    [2] => 3297
    [3] => 3266
    [4] => 3265
    [5] => 3260
    [6] => 3259
    [7] => 3258
    [8] => 3257
)

结束

相关推荐

如何增加nggallery carousel模板的缩略图大小

我想增加nggallery carousel模板的缩略图大小。检查此链接http://arkamediaworks.com/rel_test/uncatagorize/hello-2/?pid=6是否有更好的代码来执行此操作。以下是代码:<!-- Thumbnail list --> <?php foreach ( $images as $image ) : ?> <?php if ( $image->hidden ) continue; ?>&#