我对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。有人能帮我解决这个问题吗?
最合适的回答,由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
)