टेक्स्ट को पब्लिश बटन पर बदलें


21

क्या कुछ अलग कहने के लिए कस्टम पोस्ट प्रकार पर प्रकाशित बटन के पाठ को बदलने का एक तरीका है? उदाहरण के लिए, प्रकाशित करने के बजाय सहेजें। और ड्राफ्ट बटन भी हटा दें?

जवाबों:


16

अगर आप गौर /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
}

हाँ, यह बदसूरत है।


1
यह संस्करण 20 की तरह अधिक है :) बहुत बढ़िया कोड!
रार्स्ट नोव

मुझे भी अच्छा लगता है। दूसरे बटन को छिपाने के लिए अभी भी गायब है।
१६

सहेजें बटन को हटाना वास्तव में कठिन है, क्योंकि post_submit_meta_box()बस इसकी सामग्री को बाहर निकालता है। कोई फ़िल्टर नहीं। जावास्क्रिप्ट या ob_start()हल कर सकता है। दोनों बहुत खूबसूरत नहीं हैं।
FUXIA

एचएम, ठीक है, मैंने मूल सेव बटन को हटाने के लिए कुछ कोड जोड़ा है। इतनी मेहनत नहीं थी। :)
FUXIA

मुझे यह वर्णन करने के लिए शब्द याद हैं :) - & इसे पहले कहा था: सरणी को प्रारूपित करने के लिए अल्पविराम का उपयोग PHP
फॉर्मैटर्स

11

अनुवाद फ़िल्टर का उपयोग करने के लिए hakre के सुझाव का कोड कुछ इस तरह होगा:

add_filter( 'gettext', 'change_publish_button', 10, 2 );

function change_publish_button( $translation, $text ) {

if ( $text == 'Publish' )
    return 'Save';

return $translation;
}

क्या कारण हैं कि "संस्करण 1" (@toscho द्वारा लिखित वर्तमान स्वीकृत उत्तर) इस दृष्टिकोण से बेहतर / हीन है? यह मुझे दो के लिए बेहतर लगता है - सरल, "सहेजें" बटन को हटाने के लिए हैक्स की आवश्यकता नहीं है, और भविष्य के प्रमाण अधिक हैं।
रिनोगो

आपके उत्तर ने मुझे प्रेरित किया - मैंने आपके दृष्टिकोण को और अधिक विकसित करने के लिए विकसित किया है। wordpress.stackexchange.com/a/230513/10388
rinogo

2
नकारात्मक पक्ष यह होगा कि अनुवाद फ़िल्टर बहुत बार आग लगाता है , इसमें हुक लगाने से महत्वपूर्ण प्रदर्शन ओवरहेड होता है। रनटाइम में आवश्यक बिंदु के करीब फिल्टर को जोड़ / हटाकर इसे केवल सीमित समय के लिए फ़िल्टर करके कम किया जा सकता है।
रारस्ट

4

यह एक पूर्ण उत्तर नहीं है, लेकिन कुछ निर्देश हैं: प्रदर्शित कोई भी पाठ एक अनुवाद फ़िल्टर को पार करता है और इसलिए इसे कॉलबैक फ़ंक्शन (हुक) में बदला जा सकता है। इसलिए यदि हुक केवल उस पृष्ठ पर पंजीकृत किया जाता है जहां आप उसे बदलना चाहते हैं, तो काम किया जाएगा।

ड्राफ्ट बटन को सीएसएस के माध्यम से छिपाकर "हटाया" जा सकता है। CSS को <head>किसी अन्य कॉलबैक के साथ व्यवस्थापक के -tag में इंजेक्ट किया जा सकता है । मुझे लगता है कि फिल्टर admin_headउसी के लिए कहा जाता है। यह किसी भी तरह से गंदा है क्योंकि बटन अभी भी वहाँ है, उदाहरण के लिए यदि उपयोगकर्ता सीएसएस बंद करता है।


3

सुसंगतता के लिए, मैं मान रहा हूँ कि आप बटन के पाठ पर केवल इसके बजाय "प्रकाशित करें" को वर्डप्रेस में "सहेजें" का उपयोग करना पसंद करेंगे।

मेटा बॉक्स

पद सूची

@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 द्वारा दिए गए उत्तर में एक अच्छा समाधान है।


सूचना: अपरिभाषित चर: s
अमजद

@Amjad - के सभी उदाहरणों बदलने का प्रयास करें %1$sकरने के लिए %1\$s। या, नोटिस / चेतावनी बंद करने से ये त्रुटियां छिप जाएंगी।
रिनोगो

मुझे डिबगिंग के लिए नोटिस और चेतावनी रखने की आवश्यकता है। लेकिन इसके लिए धन्यवाद। त्रुटियों को उस समय जोड़कर नहीं दिखाया जाता है
अमजद

2

एक अन्य दृष्टिकोण मेटाबॉक्स को अपंजीकृत करेगा, फिर अलग-अलग मूल्यों के साथ एक ही बॉक्स को फिर से पंजीकृत करें, प्रकाशित पाठ का नामकरण।

चर्चा मैं था देखें यहाँ एक मेटा बॉक्स चलती के बारे में है, तो आप कुछ इसी तरह का नाम बदलने के पाठ प्रकाशित करें कि लागू करने के लिए सक्षम होना चाहिए।


0

तुम बस jQuery के माध्यम से बटन मिल सकता है और कुछ और के लिए पाठ नोड स्वैप कर सकते हैं। यह केक का एक टुकड़ा होगा।


0

बहुत क्लीनर और आसान समाधान।

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.