如何防止使用getText筛选器修改文本在CPT的编辑屏幕内被updateText()js函数(假设)践踏

时间:2011-04-05 作者:Dave Romsey

首先是一些背景知识。。。我有一个自定义帖子类型,我想在其中使用自定义帖子状态。自自定义post状态(stati/status/whatever), 由于尚未在内核中完全实现,我决定使用gettetext过滤器来更改某些事物的名称。例如,我将“发布”按钮上的文本“发布”改为“保存”。我带着这样的东西Rarst\'s approach here. 下面是我的代码摘要。就改变每种状态的作用/现状而言,我真的不想做任何激烈的事情。

无论如何,就PHP而言,翻译效果很好。然而,在测试过程中,我意识到如果单击misc publishing actions div中的Edit链接,然后单击随后出现的cancel链接,我翻译的“Save”按钮将恢复为“Publish”按钮。

这似乎是javascript函数的结果updateText() found in /wp-admin/js/post.dev.js. 我正在寻找一种方法来防止JS对我的翻译造成影响。我不想用DOM操作来搞乱它,但如果这是我唯一的选择,我会去做。顺便说一句,我正在运行3.1。

<?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;
        }

    }

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

首先,你有严重的拼写错误__contsruct. :)

其次,你的钩子时机不对。相关WP JavaScript通过postL10n 对象(您可以在页面的源代码中看到它的回声),将其放在一起init 早一点挂钩admin_head 您的过滤器尚未安装到位。

从快速测试中,这应该可以做到:

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

Update

好的,把它擦掉。如果我们需要背景,那就行不通了。让我们试试这个:

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\');
    }

SO网友:t31os

你们都有正确的想法,但实际上需要两个过滤器,一个用来捕捉按钮文本,另一个用来捕捉本地化文本,所以这两者的结合。

这很有效。。

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;

结束

相关推荐

Javascript有没有与PHP的preg_place_allback等价物?

我有一个php函数,它在WP内容编辑器(见下文)中的add\\u meta\\u box()内执行,我想将其转换为javascript,以便它在点击按钮时执行(按需与自动加载),以实时转换帖子内容(无需发布到服务器)。javascript中是否设置了等效的方法?add_meta_box(\'mycontentfilter\', __(\'My Content Filter\'), \'my_content_filter\', \'post\', \'side\', \'high\');