如何使用WP_Query()在后端设置页面/发布图库附件图像的顺序?

时间:2013-01-13 作者:Larry B

我正在尝试从Gallery 按在后端中设置的顺序设置页面的。

到目前为止,我已经:

  $my_wp_query = new WP_Query();

  $all_wp_pages = $my_wp_query->query(
    array(
      \'post_type\' => \'attachment\',
      \'post_parent\' => 54,  
      \'post_mime_type\' =>\'image\',
      \'post_status\' => \'inherit\', 
      \'posts_per_page\' => \'20\' 
      \'orderby\' => \'menu_order\',
      \'order\' => \'ASC\'
    )
  );

  var_dump( $all_wp_pages );
但这似乎以标准/默认顺序返回所有附件图像,而不是我在后端编辑库界面中拖放图像的顺序。

我认为这可能是因为我正在查询我页面的所有附件图像,而不是专门查询库,因此库的排序信息不会传递到返回的数组中。

有人能告诉我如何按照在后端设置的顺序获取某个page\\u id的所有库图像吗?如果有帮助的话,每页只有一个图库。

谢谢

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

通过3.5 media manager创建多媒体资料时,menu_order 不再用于保存图像的顺序,该顺序仅存在于单击Insert Gallery 按钮,通过ids= 属性这是为了适应这样一个事实,即您现在可以通过menu_order 对这个案子不起作用。要提取这些ID,我们必须使用一些正则表达式来搜索帖子内容gallery 短代码,然后在post__in 查询,这些ID现在可以通过新的in-3.5方便地对其进行排序orderby 价值post__in.

如果我更擅长regex,这可能不会那么复杂,但唉,我很糟糕,所以我们将使用一些本地WP函数,并进行一些反向操作来提取这些id属性。这将适用于帖子内容中的单个或多个库。我只是通过将其放入帖子的循环中来测试它,您会想要更改$post->post_content 无论你从何处获取帖子/页面内容。

$pattern = get_shortcode_regex();

if( preg_match_all( \'/\'. $pattern .\'/s\', $post->post_content, $matches )
    && array_key_exists( 2, $matches )
    && in_array( \'gallery\', $matches[2] ) ):

        $keys = array_keys( $matches[2], \'gallery\' );

        foreach( $keys as $key ):
            $atts = shortcode_parse_atts( $matches[3][$key] );
                if( array_key_exists( \'ids\', $atts ) ):

                    $images = new WP_Query(
                        array(
                            \'post_type\' => \'attachment\',
                            \'post_status\' => \'inherit\',
                            \'post__in\' => explode( \',\', $atts[\'ids\'] ),
                            \'orderby\' => \'post__in\'
                        )
                    );

                    if( $images->have_posts() ):
                        // loop over returned images
                    endif;

                    wp_reset_query();

                endif;
        endforeach;

endif;

SO网友:anderly

你是对的。

功能表\\u顺序不再用于多媒体资料中的媒体。不幸的是,库顺序的唯一“来源”似乎是嵌入在页面/帖子内容中的库短代码的“ids”参数。

不确定这是出于设计还是疏忽,但也可能是出于设计,因为您现在可以在图库中包含媒体,即使它没有“附加”到页面/帖子。在任何情况下,下面是我用来获取ID并根据快捷码中指定的顺序获取附件的方法。

关键是调用get\\u posts时的“orderby”参数必须是“post\\u in”,这告诉它按照“include”参数中指定的post id顺序进行排序。见下文。

// helper function to return first regex match
function get_match( $regex, $content ) {
    preg_match($regex, $content, $matches);
    return $matches[1];
} 

// Extract the shortcode arguments from the $page or $post
$shortcode_args = shortcode_parse_atts(get_match(\'/\\[gallery\\s(.*)\\]/isU\', $post->post_content));

// get the ids specified in the shortcode call
$ids = $shortcode_args["ids"];

// get the attachments specified in the "ids" shortcode argument
$attachments = get_posts(
    array(
        \'include\' => $ids, 
        \'post_status\' => \'inherit\', 
        \'post_type\' => \'attachment\', 
        \'post_mime_type\' => \'image\', 
        \'order\' => \'menu_order ID\', 
        \'orderby\' => \'post__in\', //required to order results based on order specified the "include" param
    )
);
这并不理想,如果WP-core能够将这种排序存储在数据库中的某个地方,那就太好了,但在我们找到更好的方法之前,它是有效的。

希望有帮助!

SO网友:Steve

$oImages = get_posts(
    array(
         \'numberposts\' => -1,
         \'post_parent\' => $post->ID,
         \'post_status\' => \'inherit\',
         \'post_type\' => \'attachment\',
         \'post_mime_type\' => \'image\',
         \'order\' => \'ASC\',
         \'orderby\' => \'menu_order\'
         )
);
这段代码对我一直都很有用。

SO网友:Nagendra Rao

如果您仍在寻找一种更简单的方法,可以使用附件插件,

http://wordpress.org/plugins/attachments/

它保持了图库的独立性,不会将图像库的短代码放在帖子内容中,从而为您的帖子/页面/自定义帖子中的图像显示提供了完全的保留。您也可以通过拖放更改图像的顺序

以下是如何检索图库图像的示例代码,

<?php $attachments = new Attachments( \'attachments\' ); /* pass the instance name */ ?>
<?php if( $attachments->exist() ) : ?>
  <h3>Attachments</h3>
  <p>Total Attachments: <?php echo $attachments->total(); ?></p>
  <ul>
    <?php while( $attachments->get() ) : ?>
      <li>
        ID: <?php echo $attachments->id(); ?><br />
        Type: <?php echo $attachments->type(); ?><br />
        Subtype: <?php echo $attachments->subtype(); ?><br />
        URL: <?php echo $attachments->url(); ?><br />
        Image: <?php echo $attachments->image( \'thumbnail\' ); ?><br />
        Source: <?php echo $attachments->src( \'full\' ); ?><br />
        Size: <?php echo $attachments->filesize(); ?><br />
        Title Field: <?php echo $attachments->field( \'title\' ); ?><br />
        Caption Field: <?php echo $attachments->field( \'caption\' ); ?>
      </li>
    <?php endwhile; ?>
  </ul>
<?php endif; ?> 

结束

相关推荐

meta_value_num sort glitch

我有一个自定义查询,我有一个包含序列号的元键:1.1、1.2、2.1、2.2。。。11.1等当数字序列达到两位数时,即5.11、5.12、5.21,就会出现问题这些看起来是这样的5.1、5.11、5.12、5.2、5.21等,而不是5.1、5.2、5.3。。。5.11、5.12等我怎样才能使它们正确排序!?$loop = new WP_Query(array( \'factsheet_category\' => $term->slug, \'orderby\'