[公開]ボタンのテキストを変更する


回答:


16

を見る/wp-admin/edit-form-advanced.phpと、メタボックスがあります。

add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');

注意してください__('Publish')-関数__()translate()、フィルターを取得する場所につながります'gettext'

問題を処理するには、次の2つの方法があります。

@Rarstがいる、私はバージョン2を追加しますので、バージョン1を掲載:)

<?php
/*
Plugin Name: Retranslate
Description: Adds translations.
Version:     0.1
Author:      Thomas Scholz
Author URI:  http://toscho.de
License:     GPL v2
*/

class Toscho_Retrans {
    // store the options
    protected $params;

    /**
     * Set up basic information
     * 
     * @param  array $options
     * @return void
     */
    public function __construct( array $options )
    {
        $defaults = array (
            'domain'       => 'default'
        ,   'context'      => 'backend'
        ,   'replacements' => array ()
        ,   'post_type'    => array ( 'post' )
        );

        $this->params = array_merge( $defaults, $options );

        // When to add the filter
        $hook = 'backend' == $this->params['context'] 
            ? 'admin_head' : 'template_redirect';

        add_action( $hook, array ( $this, 'register_filter' ) );
    }

    /**
     * Conatiner for add_filter()
     * @return void
     */
    public function register_filter()
    {
        add_filter( 'gettext', array ( $this, 'translate' ), 10, 3 );
    }

    /**
     * The real working code.
     * 
     * @param  string $translated
     * @param  string $original
     * @param  string $domain
     * @return string
     */
    public function translate( $translated, $original, $domain )
    {
        // exit early
        if ( 'backend' == $this->params['context'] )
        {
            global $post_type;

            if ( ! empty ( $post_type ) 
                && ! in_array( $post_type, $this->params['post_type'] ) )
            {
                return $translated;
            }
        }

        if ( $this->params['domain'] !== $domain )
        {
            return $translated;
        }

        // Finally replace
        return strtr( $original, $this->params['replacements'] );
    }
}

// Sample code
// Replace 'Publish' with 'Save' and 'Preview' with 'Lurk' on pages and posts
$Toscho_Retrans = new Toscho_Retrans(
    array (
        'replacements' => array ( 
            'Publish' => 'Save'
        ,   'Preview' => 'Lurk' 
        )
    ,   'post_type'    => array ( 'page', 'post' )
    )
);

プラグインとしてコードを使用する必要はありません。テーマのfunctions.phpに含めるだけで十分です。

更新

元の[保存]ボタンを削除するには([ドラフト]ボタンが不明)、次のコードをfunctions.php / aプラグインに追加します。

add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{   
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}

はい、それはいです。


1
それはバージョン20のようなものです:)素晴らしいコードです!
ラースト

私も好きです。他のボタンを非表示にするためにまだありません。
-hakre

保存ボタンを削除するのは非常に困難です。なぜならpost_submit_meta_box()、コンテンツをダンプするだけだからです。フィルターはまったくありません。Javascriptまたはそれob_start()を解決できます。どちらも非常にエレガントではありません。
fuxia

わかりました、元の[保存]ボタンを削除するコードを追加しました。それほど難しくなかった。:)
fuxia

これを説明する言葉がありません:)-と前に言った:コンマを使用して配列をフォーマットすることは、PHP Formatters Award +1+に値する
-brasofilo

11

翻訳フィルターを使用するというhakreの提案のコードは次のようになります。

add_filter( 'gettext', 'change_publish_button', 10, 2 );

function change_publish_button( $translation, $text ) {

if ( $text == 'Publish' )
    return 'Save';

return $translation;
}

「バージョン1」(@ toschoによって書かれた現在受け入れられている回答)がこのアプローチより優れている/劣っている理由はありますか?これは私にとっては2つのうちのほうが良いようです-よりシンプルで、「保存」ボタンを削除するためにハックを必要とせず、より将来性があります。
-rinogo

あなたの答えは私にインスピレーションを与えました-私はより多くの文字列をカバーするためにあなたのアプローチを進化させました。wordpress.stackexchange.com/a/230513/10388
rinogo

2
欠点は、変換フィルターが何度も起動することです。これにフックすると、パフォーマンスのオーバーヘッドが大きくなります。これは、実行時に必要なポイントの近くにフィルターを追加/削除することにより、限られた時間だけフィルタリングすることで削減できます。
ラスト

4

これは完全な答えではありませんが、いくつかの指示があります。表示されるテキストはすべて翻訳フィルターを超えているため、コールバック関数(フック)で変更できます。したがって、フックを変更したいページでのみフックが登録されている場合、作業は完了です。

下書きボタンは、CSSで非表示にすることで「削除」できます。CSSは<head>、別のコールバックで管理者の-tagに挿入できます。そのためにフィルターが必要だと思いますadmin_head。ユーザーがCSSをオフに切り替えた場合など、ボタンがまだあるため、何らかの方法で汚れています。


3

一貫性を保つために、ボタンのテキストだけでなく、Wordpress全体で「公開」ではなく「保存」を使用することをお勧めします。

メタボックス

投稿リスト

@Rarstが提供するソリューションに基づいて、コードを拡張して、「パブリッシュ」という単語の他の多くの(すべて?)インスタンスを「保存」の適切なバリエーションに変換しました。

add_filter("gettext", "translate_publish_post_status", 10, 2);
add_filter("ngettext", "translate_publish_post_status_number", 10, 5);
add_filter("ngettext_with_context", "translate_publish_post_status_number", 10, 6);

function translate_publish_post_status($translation, $text) {
    switch($text) {
        case "Publish":                     return "Save";
        case "Published on: <b>%1\$s</b>":  return "Saved on: <b>%1\$s</b>";
        case "Publish <b>immediately</b>":  return "Approve <b>immediately</b>";
        case "Publish on: <b>%1\$s</b>":    return "Approve on: <b>%1\$s</b>";
        case "Privately Published":         return "Privately Saved";
        case "Published":                   return "Saved";
        case "Save & Publish":              return "Save"; //"Double-save"? :)
        default:                            return $translation;
    }
}

function translate_publish_post_status_number($translation, $single, $plural, $number, $domain) {
    if($translation == "Published <span class=\"count\">(%s)</span>") {
        return "Saved <span class=\"count\">(%s)</span>";
    }

    return $translation;
}

下書きボタンを削除するには、@ toschoの回答に適切なソリューションが含まれています。


Notice:未定義の変数:s
Amjad

@Amjad-のすべてのインスタンスを%1$sに変更してみてください%1\$s。または、通知/警告をオフにすると、これらのエラーが隠されます。
rinogo

デバッグのために通知と警告を保持する必要があります。しかし、これに感謝します。追加することにより、もはや示してはいけないの誤差は\
のAmjad

2

別のアプローチは、メタボックスの登録を解除し、その同じボックスを異なる値で再登録して、発行テキストの名前を付けることです。

メタボックスの移動に関するここでの議論を参照してください。パブリッシュテキストの名前を変更するのに似たものを適用できるはずです。


0

jQueryを介してボタンを見つけ、テキストノードを別のものに交換することができます。それは簡単なことです。


0

よりクリーンで簡単なソリューション。

function change_publish_btn_txt() {
    echo "<script type='text/javascript'>jQuery(document).ready(function(){
        jQuery('#publish').attr('value', 'Your Custom Text');
    });</script>";
}
add_action('admin_footer-post-new.php', 'change_publish_btn_txt', 99);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.