图库图像标题-作为贴子的标题,它附加到parent_titles
属性。
这可以通过设置suppress_filters
为库查询设置为false,并通过the_posts
滤器然后,我们可以通过shortcode_atts_gallery
滤器
Example
使用
parent_titles
作为布尔字符串,我们可以如下所示使用它:
[gallery parent_titles="yes" ids="132,321,213"]
[gallery parent_titles="true" ids="132,321,213"]
[gallery parent_titles="1" ids="132,321,213"]
下面是我为@JuliaGalden创建的测试用例的一些截图
首先,我创建了三个帖子,并在每个帖子上附加了相应的彩色图像:
然后,我创建了一个图库,其中包含:
[gallery ids="132,321,213"]
显示的图像标题如下:
然后我添加了自定义属性:
[gallery parent_titles="yes" ids="132,321,213"]
结果是:
其中标题现在是来自父帖子的标题。
Demo plugin
下面是一个可以支持此功能的演示插件(PHP 5.4+):
<?php
/**
* Plugin Name: Gallery Image Caption As The Parent Post\'s Title
* Description: Support for boolean parent_titles attribute in native post galleries
* Plugin URI: http://wordpress.stackexchange.com/a/228857/26350
* Version: 1.0.1
*/
namespace WPSE\\Q228851;
class Main
{
/**
* @var bool
*/
private $active;
/**
* Setup actions and filters
*/
public function activate()
{
add_filter( \'shortcode_atts_gallery\', [ $this, \'shortcode_atts_gallery\' ], 999, 3 );
add_action( \'pre_get_posts\', [ $this, \'pre_get_posts\' ] );
add_filter( \'the_posts\', [ $this, \'the_posts\' ] );
}
/**
* Activate if the parent_titles attribute is set
*/
public function shortcode_atts_gallery( $out, $pair, $atts )
{
if( isset( $out[\'parent_titles\'] )
&& wp_validate_boolean( $out[\'parent_titles\'] )
||
isset( $atts[\'parent_titles\'] )
&& wp_validate_boolean( $atts[\'parent_titles\'] )
)
$this->active = true;
return $out;
}
/**
* Don\'t suppress filters for the gallery posts query
*/
public function pre_get_posts( \\WP_Query $q )
{
if( $this->active )
$q->set( \'suppress_filters\', false );
}
/**
* Override each image title with the title of post it\'s attached to
*/
public function the_posts( $posts )
{
if( $this->active )
{
foreach( $posts as $post )
{
if( $post->post_parent )
$post->post_excerpt = get_post_field( \'post_title\', $post->post_parent );
}
$this->active = false;
}
return $posts;
}
} // end class
/**
* Activate
*/
( new Main )->activate();
如何安装:将此代码复制到
/wp-content/plugins/galleries-with-parent-post-titles/plugin.php
以通常的方式在wp admin后端文件并激活插件。然后添加
parent_titles="yes"
到要显示父帖子标题的库快捷码。
Auto activation for all galleries
要为所有库自动执行此操作,我们可以更改
Main::shortcode_atts_gallery()
方法:
public function shortcode_atts_gallery( $out, $pair, $atts )
{
$this->active = true;
return $out;
}
或者使用@JuliaGalden创建的以下过滤器,可以在中进行测试,例如
functions.php
:
add_filter(\'shortcode_atts_gallery\', \'overwrite_gallery_atts_wpse_95965\', 10, 3 );
function overwrite_gallery_atts_wpse_95965( $out, $pairs, $atts )
{
$out[\'parent_titles\'] = \'yes\';
return $out;
}
如果我们想在插件中使用它,那么我们必须将其更改为
add_filter( \'shortcode_atts_gallery\', __NAMESPACE__ . \'\\\\overwrite_gallery_atts_wpse_95965\', 10, 3 );
function overwrite_gallery_atts_wpse_95965( $out, $pairs, $atts )
{
$out[\'parent_titles\']=\'yes\';
return $out;
}
因为我们为插件添加了名称空间。
我们也可以创建一个过滤器:
$this->active = apply_filters( \'wpse_gallery_parent_titles\', true, $atts, $pair );
。。。等等,等等,但我现在就把它留在这里;-)