以Gutenberg的名字重新命名帖子格式

时间:2019-11-26 作者:Benjamin Antoni Andersen

我以前重命名过我的帖子格式,但自从古腾堡更新后,它就不再起作用了。

我在下面的链接中尝试了Aaron的翻译解决方案,但WordPress没有在后端使用翻译。有没有新的方法可以做到这一点?我没有足够的经验从WordPress中挖掘出来。

链接:Is it possible to rename a post format?

这是我的尝试:

function rename_post_formats( $translation, $text, $context, $domain ) {

  $names = array(
    \'Aside\'  => \'Breaking News\',
    \'Status\' => \'Notice\'
  );

  if ( $context == \'Post format\' ) {

    $translation = str_replace( array_keys($names), array_values($names), $text );

    var_dump( $translation );
  }
  return $translation;  
}

add_filter( \'gettext_with_context\', \'rename_post_formats\', 10, 4 );
在执行str\\u replace之后,当我var\\u dump$translation时,它包含新名称,但WordPress不使用它。而且,奇怪的是,它连续被丢弃了5次(不知道这是否有用)。

非常感谢您的帮助!

编辑:如果不清楚,我希望名称更改的位置位于此下拉列表中:enter image description here

1 个回复
SO网友:Jacob Peattie

在块编辑器中更改字符串的情况很复杂。这里有两个问题:

块编辑器(Gutenberg)使用的post格式列表不可使用JavaScript hooks, 正如该列表在PHP中不可过滤一样

  • JavaScript translation functions 块编辑器使用的gettext PHP翻译函数可用的挂钩,例如。gettext_with_context.here. 在那篇文章中,他指出gettext 过滤器还不存在,但在5.0.2中引入了一个名为load_script_translations, 其中:

    筛选给定文件、脚本句柄和文本域的脚本翻译。这样,您可以在从翻译文件加载翻译后覆盖翻译。

    要使用它,您需要知道被翻译脚本的句柄,为翻译解码JSON,然后将其重新编码为JSON。

    在您的情况下,post格式名称在/packages/editor/src/components/post-format/index.js 块编辑器中的文件,这意味着它们是使用句柄的“编辑器”包的一部分wp-editor 在WordPress中(JavaScript包的脚本句柄可用here).

    因此,使用此过滤器重命名post格式的方法是:

    add_filter(
        \'load_script_translations\',
        function( $translations, $file, $handle, $domain ) {
            /**
             * The post format labels used for the dropdown are defined in the
             * "wp-editor" script.
             */
            if ( \'wp-editor\' === $handle ) {
                /**
                 * The translations are formatted as JSON. Decode the JSON to modify
                 * them.
                 */
                $translations = json_decode( $translations, true );
    
                /**
                 * The strings are inside locale_data > messages, where the original
                 * string is the key. The value is an array of translations.
                 *
                 * Singular strings only have one value in the array, while strings
                 * with singular and plural forms have a string for each in the array.
                 */
                $translations[\'locale_data\'][\'messages\'][\'Aside\']  = [ \'Breaking News\' ];
                $translations[\'locale_data\'][\'messages\'][\'Status\'] = [ \'Notice\' ];
    
                /**
                 * Re-encode the modified translations as JSON.
                 */
                $translations = wp_json_encode( $translations );
            }
    
            return $translations;
        },
        10,
        4
    );
    
    需要记住的一点是gettext 过滤器,此过滤器仅过滤特定脚本的翻译。因此,如果在另一个脚本中定义并使用了post格式名称,则需要单独过滤该脚本的翻译。您还需要继续使用gettext 用于在块编辑器外部转换post格式名称的过滤器。

  • 相关推荐