web-dev-qa-db-ja.com

Gettextフィルターを使用して変更されたテキストがCPTの編集画面内でupdateText()js関数によって(おそらく)スタンプされるのを防ぐ方法

最初の10代の背景...私はカスタム投稿ステータスを使用したいカスタム投稿タイプがあります。カスタム投稿ステータス (stati/status/whatever) )はコア内では完全には実装されていないので、特定のものの名前を変更するためにgettetextフィルタを使用することにしました。テキスト「発行」を発行ボタンに「保存」と言うようにしました。私は Rarstのアプローチはこちら のようなものを使っていました。コードの要約は以下のとおりです。それぞれのステータスはあります/あります。

とにかく、PHPに関する限り、翻訳はうまくいきます。しかし、テスト中に、misc publishing actions div内の[Edit]リンクをクリックし、次に表示される[キャンセル]リンクをクリックすると、翻訳された[Save]ボタンが[Publish]ボタンに戻ることがわかりました。

これはjavascript関数 /wp-admin/js/post.dev.js にあるupdateText()の結果として発生しているようです。私は、DOM操作を使用してJSを混乱させないようにする方法を探しています。しかし、それが私の唯一の選択肢であるならば、私はそれに行きます。

<?php
class MyClass {

        function __contsruct() {
            add_action( 'admin_head', array ( &$this, 'load_gettext_filters' ) );
        }

        function load_gettext_filters() {
            add_filter( 'gettext', array ( &$this, 'change_publishing_text' ), 10, 2 );
        }

        function change_publishing_text( $translation, $text ) {
            global $post;

            if ( ! isset ( $post->post_type ) ) {
                return $translation;
            }

            if ( 'mypost' === $post->post_type ) {
                if ( ( 'Publish' === $text ) ) {
                    return 'Save';
                }
            }
            return $translation;
        }

    }
4
Dave Romsey

まず、__contsructに厄介なタイプミスがあります。 :)

第二に、フックのタイミングが間違っています。関連WP JavaScriptはpostL10nオブジェクト(ページのソースにエコー表示されます)を介してローカライズされ、initフックにまとめられます-admin_headよりも早くフィルタはまだ配置されていません。

クイックテストから、これを行う必要があります:

add_action( 'init', array ( &$this, 'load_gettext_filters' ), 9 );

更新

OKコンテキストが必要な場合は機能しません。これを試してみましょう:

add_action('admin_footer', array ( &$this, 'localize_post_script' ) );

    function localize_post_script() {

        global $wp_scripts;

        $wp_scripts->registered['post']->extra['l10n'][1]['publish'] = __('Publish');
    }
3
Rarst

あなたは両方とも正しい考えを持っています、しかしあなたは実際に両方のフィルタを必要とするでしょう。

これは動作します。

class MyClass {
    function __construct() {
        add_action('admin_head-post.php',     array ( $this, 'load_gettext_filters' ), 1 );
        add_action('admin_head-post-new.php', array ( $this, 'load_gettext_filters' ), 1 );
    }

    function load_gettext_filters() {
        global $post_type, $wp_scripts;

        if( 'YOURTYPENAMEHERE' != $post_type )
            return;

        $wp_scripts->registered['post']->extra['l10n'][1]['publish'] = __('Save');

        add_filter( 'gettext', array ( $this, 'change_publishing_text' ), 10, 2 );
    }

    function change_publishing_text( $translation, $text ) {
        if( 'Publish' != $text )
            return $translation;

        return __( 'Save' );
    }
}
$MyClass = new MyClass;
5
t31os