Có cách nào để thay đổi văn bản của nút xuất bản trên một loại bài đăng tùy chỉnh để nói một số khác nhau không? Ví dụ: Lưu thay vì Xuất bản. Và cũng loại bỏ nút dự thảo?
Có cách nào để thay đổi văn bản của nút xuất bản trên một loại bài đăng tùy chỉnh để nói một số khác nhau không? Ví dụ: Lưu thay vì Xuất bản. Và cũng loại bỏ nút dự thảo?
Câu trả lời:
Nếu bạn nhìn vào /wp-admin/edit-form-advanced.php
, bạn sẽ tìm thấy hộp meta:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Lưu ý __('Publish')
- chức năng __()
dẫn đến translate()
nơi bạn nhận bộ lọc 'gettext'
.
Có hai cách để xử lý vấn đề của bạn: 1. Địa chỉ chuỗi trong một hàm chuyên biệt duy nhất (đảm bảo khớp với tên miền văn bản chính xác!) Hoặc 2. sử dụng cách tiếp cận chung hơn.
@Rarst vừa mới đăng phiên bản 1, vì vậy tôi sẽ thêm phiên bản 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' )
)
);
Bạn không cần sử dụng mã làm plugin. Bao gồm nó trong hàm.php của chủ đề của bạn sẽ là đủ.
Để xóa nút Lưu ban đầu (không chắc nút 'nháp' là gì), hãy thêm đoạn mã sau vào hàm.php / một plugin:
add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}
Vâng, nó xấu.
post_submit_meta_box()
chỉ cần bỏ nội dung của nó ra. Không có bộ lọc nào cả. Javascript hoặc ob_start()
có thể giải quyết điều đó. Cả hai không thanh lịch lắm.
Mã cho đề xuất của hakre để sử dụng bộ lọc dịch sẽ giống như thế này:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
Đây không phải là một câu trả lời đầy đủ mà là một số hướng: Bất kỳ văn bản nào được hiển thị đều vượt qua bộ lọc dịch và do đó có thể được thay đổi trong chức năng gọi lại (hook). Vì vậy, nếu hook chỉ được đăng ký trên trang mà bạn muốn thay đổi điều đó, công việc đã hoàn thành.
Nút dự thảo có thể được "loại bỏ" bằng cách ẩn nó qua CSS. CSS có thể được đưa vào <head>
-tag của quản trị viên bằng một cuộc gọi lại khác. Tôi nghĩ rằng bộ lọc được gọi admin_head
cho điều đó. Nó bằng cách nào đó bẩn vì nút vẫn còn đó, ví dụ nếu người dùng tắt CSS.
Để thống nhất, tôi cho rằng bạn thích sử dụng "Lưu" thay vì "Xuất bản" trong suốt Wordpress thay vì chỉ trên văn bản của nút.
Dựa trên giải pháp được cung cấp bởi @Rarst, tôi đã mở rộng mã để nó dịch nhiều (tất cả?) Các trường hợp khác của từ "Xuất bản" sang biến thể thích hợp của "Lưu".
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;
}
Để loại bỏ nút Nháp, câu trả lời được đưa ra bởi @toscho chứa một giải pháp tốt.
%1$s
thành %1\$s
. Hoặc, tắt thông báo / cảnh báo sẽ ẩn những lỗi này.