มีวิธีในการเปลี่ยนข้อความของปุ่มเผยแพร่ในประเภทโพสต์ที่กำหนดเองเพื่อพูดแตกต่างกันบ้างไหม? ตัวอย่างเช่นบันทึกแทนการเผยแพร่ และยังลบปุ่มร่างหรือไม่
มีวิธีในการเปลี่ยนข้อความของปุ่มเผยแพร่ในประเภทโพสต์ที่กำหนดเองเพื่อพูดแตกต่างกันบ้างไหม? ตัวอย่างเช่นบันทึกแทนการเผยแพร่ และยังลบปุ่มร่างหรือไม่
คำตอบ:
หากคุณมองเข้าไป/wp-admin/edit-form-advanced.php
คุณจะพบกล่องเมตา:
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' )
)
);
คุณไม่จำเป็นต้องใช้รหัสเป็นปลั๊กอิน รวมไว้ในหน้าที่ของชุดรูปแบบของคุณ php จะเพียงพอ
ในการลบปุ่มบันทึกดั้งเดิม (ไม่แน่ใจว่าปุ่ม 'ฉบับร่าง' คืออะไร) ให้เพิ่มรหัสต่อไปนี้ลงใน functions.php / a plugin ของคุณ:
add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}
ใช่มันน่าเกลียด
post_submit_meta_box()
เพียงทิ้งเนื้อหาของมันออกไป ไม่มีตัวกรองเลย Javascript หรือob_start()
สามารถแก้ไขได้ ทั้งไม่หรูหรามาก
รหัสสำหรับคำแนะนำของ hakre ในการใช้ตัวกรองการแปลจะเป็นดังนี้:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
นี่ไม่ใช่คำตอบที่สมบูรณ์ แต่มีบางทิศทาง: ข้อความใด ๆ ที่แสดงเกินตัวกรองการแปลและสามารถเปลี่ยนได้ในฟังก์ชั่นการโทรกลับ (hook) ดังนั้นหากเบ็ดลงทะเบียนเฉพาะในหน้าเว็บที่คุณต้องการที่จะเปลี่ยนงานทำ
ปุ่มแบบร่างสามารถ "ลบออก" ได้โดยซ่อนไว้ผ่าน CSS CSS สามารถถูกฉีดเข้าไปใน<head>
-tag ของผู้ดูแลระบบด้วยการติดต่อกลับ ฉันคิดว่าตัวกรองเรียกadmin_head
ว่า มันค่อนข้างสกปรกเมื่อปุ่มยังอยู่ที่นั่นตัวอย่างเช่นหากผู้ใช้ปิด CSS
เพื่อความสอดคล้องฉันสมมติว่าคุณต้องการใช้ "บันทึก" แทน "เผยแพร่" ตลอดทั้ง Wordpress แทนที่จะเป็นเพียงแค่ข้อความของปุ่ม
จากวิธีการแก้ปัญหาที่ให้บริการโดย @Rarst ฉันได้ขยายโค้ดดังนั้นมันจึงแปลอินสแตนซ์อื่น ๆ ของคำว่า "เผยแพร่" เป็นจำนวนมาก (ทั้งหมดหรือไม่) เป็นรูปแบบที่เหมาะสมของ "บันทึก"
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 มีทางออกที่ดี
%1$s
%1\$s
หรือปิดการแจ้งเตือน / คำเตือนจะซ่อนข้อผิดพลาดเหล่านี้
วิธีการอื่นจะเป็นการยกเลิกการลงทะเบียน metabox จากนั้นลงทะเบียนกล่องเดิมใหม่ที่มีค่าต่างกันตั้งชื่อข้อความที่ประกาศ
ดูการสนทนาที่ฉันมีที่นี่เกี่ยวกับการย้ายกล่องเมตาคุณควรจะสามารถใช้สิ่งที่คล้ายกับการเปลี่ยนชื่อข้อความที่เผยแพร่
คุณสามารถหาปุ่มผ่าน jQuery และสลับโหนดข้อความสำหรับสิ่งอื่น นั่นคงจะเป็นเค้กชิ้นหนึ่งที่ต้องทำ
ทางออกที่สะอาดและง่ายกว่ามาก
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);