web-dev-qa-db-ja.com

カスタム投稿タイプのおすすめ画像テキストをフィルタリングするための最良の方法は?

私のプラグインのカスタム投稿タイプの「注目画像の設定」、「注目画像の削除」、および「注目画像の使用」テキストリンクを変更しようとしています Meteor Slides

私は "admin_post_thumbnail_html"フィルタフックを見つけ、スライド投稿タイプだけで "Set featured image"を "Set slide image"に変更するいくつかのコードを思いついた。

    if ((isset($_GET['post_type']) && $_GET['post_type'] == 'slide') || (isset($post_type) && $post_type == 'slide')) {

    add_filter( 'admin_post_thumbnail_html', 'meteorslides_set_featured', 9999, 1 );

    function meteorslides_set_featured( $content ) {

        return str_replace( 'Set featured image', 'Set slide image', $content );

    }

}

"注目の画像の削除"についても同じことを試みましたが、うまくいきませんでしたが、all投稿タイプについてはこのコードを使用して変更できます。

    add_filter( 'admin_post_thumbnail_html', 'meteorslides_remove_featured', 9999, 1 );

function meteorslides_remove_featured( $content ) {

    return str_replace( 'Remove featured image', 'Remove slide image', $content );

}

「おすすめの画像を設定」のフィルタリングが「おすすめの画像の削除」とは異なる動作をする理由について、誰かが考えていますか。

「おすすめ画像として使用」を変更するのは少し面倒ですが、これに対するフィルタはありません。しかし私は Tracでチケットを見つけました 他の誰かが同じことをやろうとしていました、そして翻訳文字列をフィルタリングするための提案がありました。

この解決策はうまくいきました。「おすすめの画像として使用」というテキストを変更することができましたが、これもすべての投稿タイプに適用されるため、絞り込む方法がわかりません。

    add_filter( 'gettext', 'meteorslides_use_featured', 9999, 4 );

function meteorslides_use_featured( $translation, $text, $domain ) {

    $translations = &get_translations_for_domain( $domain );

    if ( $text == 'Use as featured image' ) {

        return $translations->translate( 'Use as slide image' );

    }

    return $translation;

}

オーバーレイされたメディアウィンドウは、私が特定の投稿タイプからロードしていることを「認識」しているようには見えないので、この変更が可能かどうかはわかりません。

jQueryでこれらのリンクを変更する方法を示した回答をここに見つけました 。私はフィルタを使用したいのですが、それを1つの投稿タイプに限定する方法を考え出すことができれば、それも大丈夫でしょう!

私は注目の画像を使用するいくつかの他のプラグインを見回してきましたが、私はこれらの文字列のすべてを変更したものを見つけることができませんでした。誰かがこれをやってのけましたか。

3
JLeuze

PHPまたはjQueryのどちらのルートを使用する場合でも、admin_head-post[-new].phpフックまたはadmin_print_scripts-post[-new].phpフックにフィルタを設定するか、Javascriptをエンキューすることをお勧めします。グローバル変数$post_typeが設定されていることを確認でき、それがslideであるかどうかを確認できます。投稿サムネイルコードはこれらのフックの後に呼び出されるので、このフックであなたのフィルタを設定することができ、それらは実行されます。このようなもの:

add_action( 'admin_head-post-new.php', 'wpse4270_add_filters_for_slide' );
add_action( 'admin_head-post.php', 'wpse4270_add_filters_for_slide' );
function wpse4270_add_filters_for_slide()
{
    if ( 'slide' == $GLOBALS['post_type'] ) {
        add_filter( 'admin_post_thumbnail_html', 'meteorslides_set_featured', 9999, 1 );
        add_filter( 'admin_post_thumbnail_html', 'meteorslides_remove_featured', 9999, 1 );
        add_filter( 'gettext', 'meteorslides_use_featured', 9999, 4 );
    }
}
4
Jan Fabry

Brasofiloが述べたように、admin_post_thumbnail_htmlフィルタでstr_replace()を実行できます。

function changeFeaturedImageLinks($content)
{
    $content = str_replace(__('Set featured image'), __('YOUR_CUSTOM_TEXT'), $content);
    $content = str_replace(__('Remove featured image'), __('YOUR_CUSTOM_TEXT'), $content);

    return $content;
}

add_filter('admin_post_thumbnail_html', 'changeFeaturedImageLinks');
1

私は最初に 'current_screen'アクションにフックして、私のpost_typeが設定されているかどうかを判断し、それからフィルターを追加することによってこれを達成しました。もっと短い方法があるかもしれませんが、これはあなたが与えられた投稿タイプについてのみテキストを変更する必要がある場合にうまくいきます。

public function set_featured_image_filter(){
    $screen = get_current_screen();
    if( isset($screen->post_type) && $screen->post_type == 'advertisment'){
        add_filter( 'admin_post_thumbnail_html', 'replace_featured_image_text', 10, 1);
    }
}
add_action('current_screen', 'set_featured_image_filter');

public function replace_featured_image_text( $content ) {
        return str_replace( 'Set featured image', __('Set Advertisment image', $this->rns_slingshot_plugin), $content );
    }
0
rfair404