从空的图库快捷代码中提取图库图片信息

时间:2018-01-20 作者:Rick Hellewell

我有几个帖子[gallery] 在帖子内容的“文本”模式下显示的代码没有任何图片ID。查看页面会显示库中的图片,但尝试在自定义功能中提取图片ID不会显示图片。(自定义函数-在我自己的插件中-使用循环以数据库中的特定格式显示内容;内容最终导出到文件以供外部使用。)

帖子是用posite(通过电子邮件导入帖子内容的插件)创建的;电子邮件附有图片。(这不是插件问题。)

以文本模式查看时,内容显示类似的内容:

Here is text before the gallery shortcode.[gallery]
我有get_post_gallery() 循环中的函数,样例代码如Codex所示:

$gallery = get_post_gallery( get_the_ID(), false );
但是$gallery 不返回任何内容。我需要获取附加到空[库]快捷码的图像。这个do_shortcode() 函数(针对帖子内容)并没有提供我需要的内容:我需要创建一个带有图像信息(src、href、alt、class等)的img标记。

如何获取与空[gallery] 标签

1 个回复
SO网友:Nathan Johnson

我不喜欢WordPress处理库短代码的方式。

这是我用来在图库中获取图像的一些稍加修改的代码。在本例中,附件(以及它们的ID)只有在处理完gallery短代码后才可用。

如果您希望显示不同于默认库的HTML,我会使用post_gallery 过滤以短路内置WordPress快捷码并显示您自己的快捷码。

namespace StackExchange\\WordPress;

class Q291678 {
   protected $attachements = [];
   public function getAttachments() : array {
     return $this->attachments;
   }
   public function wp_loaded() {
     \\add_filter( \'shortcode_atts_gallery\', [ $this, \'shortcode_atts_gallery\' ], 10, 4 );
   }
   public function shortcode_atts_gallery( array $out, array $pairs, array $atts, string $shortcode ) : array {
     $this->attachements = $this->getPostAttachments( $out );
     return $out;
   }
   protected function getPostAttachments( array $atts ) : array {
     //* Code copied from WP Core to get post attachements
     $id = intval( $atts[ \'id\' ] );
     if ( ! empty( $atts[ \'include\' ] ) ) {
         $_attachments = \\get_posts( [
           \'include\'        => $atts[ \'include\' ],
           \'post_status\'    => \'inherit\',
           \'post_type\'      => \'attachment\',
           \'post_mime_type\' => \'image\',
           \'order\'          => $atts[ \'order\' ],
           \'orderby\'        => $atts[ \'orderby\' ]
         ] );

         $attachments = [];
         foreach ( $_attachments as $key => $val ) {
             $attachments[ $val->ID ] = $_attachments[ $key ];
         }
     } elseif ( ! empty( $atts[\'exclude\'] ) ) {
         $attachments = \\get_children( [
           \'post_parent\'    => $id,
           \'exclude\'        => $atts[ \'exclude\' ],
           \'post_status\'    => \'inherit\',
           \'post_type\'      => \'attachment\',
           \'post_mime_type\' => \'image\',
           \'order\'          => $atts[ \'order\' ],
           \'orderby\'        => $atts[ \'orderby\' ]
         ] );
     } else {
         $attachments = \\get_children( array( 
           \'post_parent\'    => $id, 
           \'post_status\'    => \'inherit\',
           \'post_type\'      => \'attachment\',
           \'post_mime_type\' => \'image\',
           \'order\'          => $atts[ \'order\' ],
           \'orderby\'        => $atts[ \'orderby\' ] ) );
     }
     //* End code from core
     return $attachments;
   }
}
\\add_action( \'wp_loaded\', [ new Q291678, \'wp_loaded\' ] );

结束

相关推荐

gallery image size

几天来,我一直在寻找WordPress图库的过滤器。我尝试了许多不同的代码,但似乎没有任何效果。我没有使用插件。我说的是股票画廊我创建了一个两列WordPress图库,并将其插入到页面中。这确实是一个2列的图库,但它也使图像大小达到128 x 49。该网站响应迅速,图像大小应在400 x 200左右。所以我想,如果我能让WordPress去掉内联的高度和宽度,响应部分将接管并填充可用空间。我尝试过的过滤器对其他图像有效,而不是画廊。我使用的是2014年的主题及其媒体查询。库是否有特定的过滤器?这是我用于其