最初の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;
}
}
まず、__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');
}
あなたは両方とも正しい考えを持っています、しかしあなたは実際に両方のフィルタを必要とするでしょう。
これは動作します。
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;