#1 楼
如果查看/wp-admin/edit-form-advanced.php
,则会找到以下meta框:add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
请注意
__('Publish')
–函数__()
指向translate()
,您可以在其中获得过滤器'gettext'
。 > 有两种方法可以解决您的问题:1.在单个专用函数中处理字符串(请确保匹配正确的textdomain!)或2.使用更通用的方法。
@Rarst刚刚发布了版本1,因此我将添加版本2。:)
<?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
}
是的,这很丑。
#2 楼
hakre建议使用翻译过滤器的代码如下所示:add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
评论
是否有理由说明“版本1”(当前接受的答案,由@toscho编写)优于/劣于此方法?对我来说,这似乎是两者中更好的选择-更简单,不需要黑客删除“保存”按钮,并且更具前瞻性。
– rinogo
16年6月23日在0:53
您的回答启发了我-我发展了您的方法以涵盖更多字符串。 wordpress.stackexchange.com/a/230513/10388
– rinogo
16年6月23日在2:33
不利的一面是转换过滤器会触发很多次,而将其挂在钩子上会带来很大的性能开销。通过在运行时所需位置附近添加/删除过滤器,仅在有限的时间内进行过滤,可以减少这种情况。
–稀有
16年6月29日在13:24
#3 楼
这不是一个完整的答案,而是一些指导:显示的所有文本都超过翻译过滤器,因此可以在回调函数(挂钩)中进行更改。因此,如果挂钩仅在您要更改的页面上注册,则工作已完成。可以通过CSS隐藏草稿按钮来“删除”草稿按钮。可以使用另一个回调将CSS注入admin的
<head>
-tag中。我认为该过滤器称为admin_head
。由于按钮仍然存在,因此有点脏,例如,如果用户关闭CSS。#4 楼
为了保持一致性,我假设您希望在整个Wordpress中使用“保存”而不是“发布”,而不是仅在按钮的文本上使用。基于@Rarst提供的解决方案,我扩展了代码,以便将许多(全部?)单词“ Publish”的其他实例转换为“ Save”的相应变体。 >
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给出的答案就是一个很好的解决方案。
评论
注意:未定义的变量:s
–阿姆贾德
17年5月1日23:16
@Amjad-尝试将%1 $ s的所有实例更改为%1 \ $ s。或者,关闭通知/警告将隐藏这些错误。
– rinogo
17年5月2日在16:11
我确实需要保留通知和警告以进行调试。但是为此。通过添加\,该错误不再显示
–阿姆贾德
17年5月2日在18:31
#5 楼
另一种方法是取消注册元框,然后使用不同的值重新注册同一框,命名为发布文本。请参阅我在此处有关移动元框的讨论,您应该能够应用类似于重命名“发布文本”的内容。
#6 楼
您可以通过jQuery找到该按钮,然后将文本节点交换为其他内容。那简直是小菜一碟。#7 楼
更清洁,更轻松的解决方案。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);
评论
那更像是版本20 :)很棒的代码!
–稀有
2010-11-5 8:22
我也喜欢仍然无法隐藏其他按钮。
– hakre
2010年11月6日18:49
删除保存按钮确实很困难,因为post_submit_meta_box()只会转储其内容。完全没有过滤器。 Javascript或ob_start()可以解决这个问题。两者都不是很优雅。
– fuxia♦
2010年11月6日在21:21
嗯,好的,我添加了一些代码以删除原来的“保存”按钮。没那么难。 :)
– fuxia♦
2010年11月6日,21:55
我想念这句话:)-之前曾说过:使用逗号格式化数组值得PHP Formatters Award +1+
–brasofilo
2012年5月17日14:45