How to get gallery images?

时间:2012-12-17 作者:jay

我在wordpress的帖子中上传了一些图片(例如,帖子#1和帖子#2)。现在我创建了一个新帖子(例如,帖子#3),在这篇帖子中我插入了WordPress 3.5图库,我没有在帖子#3中上传任何图像,而是使用了帖子#1和帖子#2中的图像。现在在帖子#3中,我想获得这些图片的链接,但我似乎无法获得。我正在使用以下代码:

$attachments = get_children( array(\'post_parent\' => get_the_ID(), \'post_type\' => \'attachment\', \'post_mime_type\' =>\'image\') );
    foreach ( $attachments as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, \'medium\' );
   }
如果我在帖子中上传,它将只显示图像,但如果我从其他帖子中添加,它将不会显示图像。那么,我如何才能获得添加到库中但未上载的图像的链接。

谢谢你的帮助。

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

我也遇到了同样的问题-如何显示包含图库的帖子中的所有图像,其中一些图像没有附加到帖子上,或者附加到不同的帖子上?

WP3中的新媒体接口。5允许您将媒体库中的任何图像添加到图库中,无论它们是否已“连接”。正如您所发现的,“get\\u children”函数只返回附加到帖子的图像。我使用的技巧是从[库]短代码本身获取ID,而不是从它们是附件这一事实获取ID。短代码包括所有图像ID,无论它们是否附加到帖子。E、 g.[画廊ID=“410411412413414415”]。很明显,wordpress可以通过wordpress的核心(includes/media.php)中包含的“gallery\\u shortcode”功能来解析它,检索所有图像并以gallery格式显示它们。为了获取[图库]短代码中所有图像的ID,我在函数中创建了一个新函数。php文件:

function grab_ids_from_gallery() {

global $post;
$attachment_ids = array();
$pattern = get_shortcode_regex();
$ids = array();

if (preg_match_all( \'/\'. $pattern .\'/s\', $post->post_content, $matches ) ) {   //finds the     "gallery" shortcode and puts the image ids in an associative array at $matches[3]
$count=count($matches[3]);      //in case there is more than one gallery in the post.
for ($i = 0; $i < $count; $i++){
    $atts = shortcode_parse_atts( $matches[3][$i] );
    if ( isset( $atts[\'ids\'] ) ){
    $attachment_ids = explode( \',\', $atts[\'ids\'] );
    $ids = array_merge($ids, $attachment_ids);
    }
}
}
  return $ids;

 }
add_action( \'wp\', \'grab_ids_from_gallery\' );
现在只需使用“grab\\u ids\\u from\\u gallery()”函数在模板中以数组形式返回所有ID。

我相信有一种更优雅的方法可以做到这一点,但这对我来说很有用。本规范的依据来自:

http://core.trac.wordpress.org/ticket/22960

它讨论了这个问题。

SO网友:bosco

我必须承认,我没有时间玩3.5的新媒体库之类的东西,但我只使用代码,而不考虑WP的库功能。。。

您提供的代码使用get_children() 使用查询变量post_parent 设置为get_the_ID() (内容循环中当前正在处理的post对象的ID)。因此get_children() 只能查询当前帖子的附件,and no others.

在示例的术语中,当在循环上下文中执行代码时,处理Post 3,无法检索附加到Post 1Post 2的附件,因为它专门要求附加到Post 3的附件。

不幸的是,Wordpressnot 支持将多个值传递到post_parent 查询var,以便以所需的方式从其他帖子中检索附件,您必须获取包含帖子的附件的帖子id(帖子1和帖子2),并执行调用get_children() 对于每个,替换post_parent “的值”get_the_ID()“具有相应的ID。

通过巧妙地利用WP_Query 然而,我相信你正在寻求的解决方案(或者我假设你正在寻求——你实际上从未问过问题;)看起来像是

$attachmentParentIds = getAttachmentParentIds( get_the_ID() );
foreach( $attachmentParentIds as $attParentId ) {
    $attachments = get_children( array(\'post_parent\' => $attParentId, \'post_type\' => \'attachment\', \'post_mime_type\' =>\'image\') );
    foreach ( $attachments as $attachment_id => $attachment ) {
        echo wp_get_attachment_image( $attachment_id, \'medium\' );
    }
}
它使用如下函数

//Returns an array of post IDs containing attachments that should be displayed
//on the post indicated by the passed post ID.
function getAttachmentParentIds( $intPostId ) {
    $ids = array();

    //Figure out which posts contain attachments that need to be displayed for $intPostID

    //...

    return $ids; //return an array of IDs
}
作为逻辑的占位符,用于确定哪些帖子包含需要为传递的帖子ID显示的附件。我对您的实现或应用程序的程度不确定,因此我不知道该逻辑的细节可能涉及您的项目。

SO网友:CamilloMiller

真正的解决方案是创建一个具有自己ID的新“真实”对象“gallery”。

gallery只不过是一组图像ID,但更易于管理:

您可以直接从媒体管理器创建它,就像您现在在WP 3.5中创建新的“库”一样。xin不是生成这样的短代码:[gallery id=“xx,yy,zz”]它可以简单地创建一个新的“gallery”with its own id 并这样称呼它:[gallery galley\\u id=“123”]

您可以在新的“图库”部分中,在media下管理“real galleries”对象

您可以使用一组函数来管理这样的对象。这样,OP的问题就可以通过传递要在附件中使用的gallery\\u id来解决。php模板(或者也可以实现的新gallery.php模板)使用相应的函数。

你可以在一个gallery对象中混合贴在不同帖子上的图片,而不用担心原始帖子。

你可以在一篇文章中添加多个图库。

如果你仔细想想,这就是下一个画廊。难怪人们经常使用这个插件。不幸的是,我不认为这么重要的特性应该被一个插件所延迟,尤其是像Nextgen这样的臃肿而沉重的插件,它包含了很多多余的特性。

从这个意义上说,我认为新媒体经理的逻辑有点缺陷。这有点像是建议您“创建”一个名为gallery的新实体,而实际上它只是为您合并一组图像ID。

我知道,如果您使用Jetpack的旋转木马显示,您不会看到该缺陷,因为它不会将您带出当前页面,您也不需要将图像绑定到您“创建”的特定库。

尽管如此,我认为新媒体管理器的UI和它实际显示画廊的功能之间存在着危险的差距。

SO网友:muhammad salman
$galleries              =  $wpdb->get_results("SELECT meta_value  FROM $wpdb->postmeta WHERE (meta_key = \'_product_image_gallery\' AND post_id = \'". $post_id ."\')");
    $gal_images_ids         = $galleries[0]->meta_value;
    foreach (explode(",", $gal_images_ids) as $gal_img_id) {
        $gal_images_url     = wp_get_attachment_url($gal_img_id);
        $gal_image_title    = end(explode("/", $gal_images_url));
    }
结束

相关推荐

get images attached to post

我希望能够在主页上的jquery滑块中使用媒体库中的图片,以便其他人无需硬编码即可轻松更新图片。我在帖子上贴了一堆照片,并尝试了这个<?php $image_query = new WP_Query(array(\'name\'=>\'slider-images\')); while ( $image_query->have_posts() ) : $image_query->the_post(); $args = array( \'post_typ