追加された画像のタイトル(またはギャラリーの作成中に追加されたもの)を投稿のタイトルで自動的に上書きする関数フックを作成することはできますか?例のように: - lorem ipsumという投稿を作成しています - 私はpingpong.jpgというファイルをアップロードしています - デフォルトではフックなしでwordpressが画像にタイトルを付けます:pingpong.jpg - 予想されるフックの結果:私の画像のタイトルは次のようになります画像をアップロードする:lorem ipsum
関数でも可能ですか?
その上で、私は自動的に変更を処理するギャラリのショートコードに属性を追加することを利用したいと思います。これまでのところ、私はそのようなものがあります:
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;
}
ネイティブギャラリーのショートコードでカスタムのparent_titles
属性を使用してそれを行う1つの方法があります。
これは、ギャラリークエリに対してsuppress_filters
をfalseに設定し、the_posts
フィルタを通して投稿の抜粋を変更することで実現できます。 shortcode_atts_gallery
フィルタを通してカスタム属性の入力を確認することができます。
例
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用に作成したテストケースのスクリーンショットです。
最初に3つの投稿を作成し、それぞれに対応するカラー画像を添付しました。
それから私はとギャラリーを作成しました:
[gallery ids="132,321,213"]
それは次のような画像のキャプションで現れました:
それから私はカスタム属性を追加しました:
[gallery parent_titles="yes" ids="132,321,213"]
そしてそれは次のように現れました:
キャプションが親投稿のタイトルになりました。
デモプラグイン
これは、この機能をサポートするデモプラグインです(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"
を追加します。
すべてのギャラリーの自動有効化
すべてのギャラリーでこれを自動的に行うには、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 );
...など、しかし、私は今のところここでそれを残すつもりです;-)