問題描述
有沒有辦法改變自定義帖子類型的發佈按鈕的文本來説一些不同?例如,保存而不是發佈。還要刪除草稿按鈕?
最佳解決方案
如果您查看/wp-admin/edit-form-advanced.php,您會發現元框:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
注意__('Publish') – 功能__()導致 translate()您得到過濾器'gettext'。
有兩種方法可以解決您的問題:1. 在一個專門的功能中處理字符串 (確保匹配正確的文本域!) 或 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 就夠了。
Update
要刪除原始的保存按鈕 (不知道’draft’ 按鈕是什麼),請將以下代碼添加到您的 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
}
是的,這很醜陋
次佳解決方案
hakre 建議使用翻譯過濾器的代碼將是這樣的:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
第三種解決方案
這不是一個完整的答案,而是一些方向:顯示的任何文本都超過了翻譯過濾器,因此可以在回調函數 (hook) 中進行更改。所以如果掛鈎只是在你想要更改的頁面上註冊,那麼工作就完成了。
草稿按鈕可以通過 CSS 隱藏來進行”removed” 。 CSS 可以被注入到管理員的<head> 標籤中,另一個回調。我認為這個過濾器叫做 admin_head 。按鈕仍然在那裏,例如如果用户切換了 CSS,那就有些髒了。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。