私はいくつかの異なる投稿タイプがあり、それぞれにメディアのアップロードがあります。私がやりたいことはそれが個々のカスタム投稿に関連するように "投稿に挿入"ボタンの名前を変更することです。例えば - カスタム投稿タイプ - "award"そしてメディアアップロードボックスには "insert into award"というボタンがあります。
何か案は?
これはそれほど簡単なことではないと思います。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を見つけ、それからそれは例のソースで可能です。
[更新]
私は最初はばかげたやり方をしていましたが、これが原因で私の答えを完全に書き直しています 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');