web-dev-qa-db-ja.com

メディアアップロードウィンドウの挿入ボタンの名前を変更する

私はいくつかの異なる投稿タイプがあり、それぞれにメディアのアップロードがあります。私がやりたいことはそれが個々のカスタム投稿に関連するように "投稿に挿入"ボタンの名前を変更することです。例えば ​​- カスタム投稿タイプ - "award"そしてメディアアップロードボックスには "insert into award"というボタンがあります。

何か案は?

1
schizdazzle

これはそれほど簡単なことではないと思います。Admin-areaのメディアページでは、CPTのpost_typeを確認することはできません。通常は、次のような小さなソースで文字列を変更できます。

if ( is_admin() )
    add_filter( 'gettext', array( 'fb_string_translate', 'gettext_filter' ), 10, 1 );
class fb_string_translate {

    static function gettext_filter( $str ) {

        $from_to = array();

        $post_type = get_post_type();
        if ( 'my_post_type' === $post_type )
            $from_to = array( 'Insert into Post' => 'Insert into Test' );

        return strtr($str, $from_to);
    }

}

しかし、あなたがチェックすることは重要です、そのページはadminの作者であり、メディアページのiframeではpost_typeを読むことができません。多分あなたはこのvarを見つけ、それからそれは例のソースで可能です。

2
bueltge

[更新]
私は最初はばかげたやり方をしていましたが、これが原因で私の答えを完全に書き直しています Stephen Harrisの投稿 。結果:現在ははるかにコンパクトになっています。

@ bueltgeのフィルタを自分のコードに適用しようとしましたが、成功しませんでした。

私のソリューションはjQueryを使って文字列を操作します。
[コンピュータから]タブに、ボタンのテキストが表示されたとき(アップロード後)に変更できるように、1秒ごとに実行する機能を追加しました。

この例では、2つのCPT( "movie"と "woo_estate")を扱います。

/*
 * Change the text "Use this Image"/"Insert into Post" on the upload window to "Insert into CPT"
*/
function wpse_26585_script_enqueuer(){
    global $current_screen;
    $post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0;
    $post_type = get_post_type($post_id);

    if( 'media-upload' == $current_screen->id && ('movie' == $post_type || 'woo_estate' == $post_type) ) {

        // VAR DECLARATION
        $select = "";
        if('movie' == $post_type)       $select = "Insert into Movie";
        if('woo_estate' == $post_type)  $select = "Insert into Property";

        // FIND CURRENT TAB
        $tab     = isset($_GET['tab']) ? $_GET['tab'] : "type";

        // CHANGE NAMES IN UPLOAD MEDIA TAB and UPDATE "SAVE ALL CHANGES" LINK TO INCLUDE OUR PARAMETER IN THE QUERY
        $jquery = ('type' == $tab) ? 'var refreshUpload = setInterval(function(){$("#media-items").each(setButtonNames);},500);' : '$("#media-items").each(setButtonNames);';

        //CHANGE BUTTON NAMES
        echo <<<HTML
        <script type="text/javascript">
        function setButtonNames() {
            jQuery(this).find('.savesend .button').val('{$select}');
        }
        jQuery(document).ready(function($){            
            {$jquery}
        });
        </script>
HTML;
    }
}
add_action('admin_head', 'wpse_26585_script_enqueuer');
0
brasofilo