क्या कुछ अलग कहने के लिए कस्टम पोस्ट प्रकार पर प्रकाशित बटन के पाठ को बदलने का एक तरीका है? उदाहरण के लिए, प्रकाशित करने के बजाय सहेजें। और ड्राफ्ट बटन भी हटा दें?
क्या कुछ अलग कहने के लिए कस्टम पोस्ट प्रकार पर प्रकाशित बटन के पाठ को बदलने का एक तरीका है? उदाहरण के लिए, प्रकाशित करने के बजाय सहेजें। और ड्राफ्ट बटन भी हटा दें?
जवाबों:
अगर आप गौर /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' )
)
);
आपको एक प्लगइन के रूप में कोड का उपयोग करने की आवश्यकता नहीं है। अपने विषय के कार्यों में इसे शामिल करना।
मूल सहेजें बटन को हटाने के लिए (निश्चित नहीं है कि 'ड्राफ्ट' बटन क्या है), अपने फ़ंक्शंस के लिए निम्न कोड जोड़ें। 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()
बस इसकी सामग्री को बाहर निकालता है। कोई फ़िल्टर नहीं। जावास्क्रिप्ट या ob_start()
हल कर सकता है। दोनों बहुत खूबसूरत नहीं हैं।
अनुवाद फ़िल्टर का उपयोग करने के लिए hakre के सुझाव का कोड कुछ इस तरह होगा:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
यह एक पूर्ण उत्तर नहीं है, लेकिन कुछ निर्देश हैं: प्रदर्शित कोई भी पाठ एक अनुवाद फ़िल्टर को पार करता है और इसलिए इसे कॉलबैक फ़ंक्शन (हुक) में बदला जा सकता है। इसलिए यदि हुक केवल उस पृष्ठ पर पंजीकृत किया जाता है जहां आप उसे बदलना चाहते हैं, तो काम किया जाएगा।
ड्राफ्ट बटन को सीएसएस के माध्यम से छिपाकर "हटाया" जा सकता है। CSS को <head>
किसी अन्य कॉलबैक के साथ व्यवस्थापक के -tag में इंजेक्ट किया जा सकता है । मुझे लगता है कि फिल्टर admin_head
उसी के लिए कहा जाता है। यह किसी भी तरह से गंदा है क्योंकि बटन अभी भी वहाँ है, उदाहरण के लिए यदि उपयोगकर्ता सीएसएस बंद करता है।
सुसंगतता के लिए, मैं मान रहा हूँ कि आप बटन के पाठ पर केवल इसके बजाय "प्रकाशित करें" को वर्डप्रेस में "सहेजें" का उपयोग करना पसंद करेंगे।
@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
। या, नोटिस / चेतावनी बंद करने से ये त्रुटियां छिप जाएंगी।