প্রকাশ বোতামে পাঠ্যটি পরিবর্তন করুন


21

কিছু আলাদা বলার জন্য কাস্টম পোস্ট টাইপের প্রকাশিত বোতামটির পাঠ্য পরিবর্তন করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, প্রকাশের পরিবর্তে সংরক্ষণ করুন। এবং খসড়া বোতামটিও সরাবেন?

উত্তর:


16

আপনি যদি সন্ধান করেন তবে আপনি /wp-admin/edit-form-advanced.phpমেটা বাক্সটি খুঁজে পাবেন:

add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');

নোট করুন __('Publish')- ফাংশনটি যেখানে আপনি ফিল্টার পাবেন সেখানে __()নিয়ে যায় ।translate()'gettext'

আপনার সমস্যাটি পরিচালনা করার জন্য দুটি উপায় রয়েছে: ১. একটি একক বিশেষায়িত ফাংশনে স্ট্রিংটিকে সম্বোধন করুন (সঠিক পাঠ্যদণ্ডের সাথে মেলে নিশ্চিত হন!) বা 2. আরও জেনেরিক পদ্ধতির ব্যবহার করুন।

@ রার্স্ট এখনই সংস্করণ 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' )
    )
);

প্লাগইন হিসাবে আপনার কোডটি ব্যবহার করার দরকার নেই। এটি আপনার থিমের ফাংশন.এফপি অন্তর্ভুক্ত করা যথেষ্ট হবে।

হালনাগাদ

আসল সেভ বোতামটি মুছে ফেলার জন্য ('ড্রাফ্ট' বোতামটি কী তা নিশ্চিত নয়), আপনার ফাংশনগুলিতে নিম্নলিখিত কোডটি যুক্ত করুন ph php / একটি প্লাগইন:

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 এর মতো :) অসাধারণ কোড!
রর্স্ট

আমি এটিও পছন্দ করি। এখনও অন্য বোতামটি গোপন করতে অনুপস্থিত।
hakre

সেভ বোতামটি সরিয়ে ফেলা সত্যিই কঠিন, কারণ post_submit_meta_box()এটির সামগ্রীর স্রোত কেবল বাইরে যায়। কোন ফিল্টার নেই। জাভাস্ক্রিপ্ট বা ob_start()সমাধান করতে পারে। উভয় খুব মার্জিত না।
ফুসিয়া

এইচএম, ঠিক আছে, আমি আসল সেভ বোতামটি সরাতে কিছু কোড যুক্ত করেছি। এত কঠিন ছিল না। :)
ফুসিয়া

আমি এটি বর্ণনা করতে শব্দগুলি মিস করছি :) - এবং এটি আগে বলেছিলেন: অ্যারে ফর্ম্যাট করতে কমা ব্যবহার পিএইচপি ফরম্যাটারস পুরষ্কারের যোগ্য +1+
ব্রাসোফিলো

11

হ্যাক্রের অনুবাদ ফিল্টার ব্যবহারের পরামর্শের কোডটি এরকম কিছু হবে:

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

function change_publish_button( $translation, $text ) {

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

return $translation;
}

কেন এই কারণগুলির তুলনায় "সংস্করণ 1" (@ গৃহীত উত্তর, @ টোসচো দ্বারা লিখিত) উচ্চতর / নিকৃষ্টতর হওয়ার কারণ রয়েছে? এটি আমার কাছে দু'জনের চেয়ে ভাল বলে মনে হচ্ছে - সহজ, "সংরক্ষণ করুন" বোতামটি সরাতে হ্যাকের প্রয়োজন হয় না এবং এটি আরও ভবিষ্যতের প্রমাণ।
রিনোগো

আপনার উত্তরটি আমাকে অনুপ্রাণিত করেছে - আমি আরও অনেকগুলি স্ট্রিং কভার করার জন্য আপনার পদ্ধতির বিকাশ করেছি। wordpress.stackexchange.com/a/230513/10388
রিনোগো

2
ক্ষয়ক্ষতিটি হ'ল অনুবাদ ফিল্টারটি প্রচুর বার জ্বলতে থাকে , এটির মধ্যে ঝুঁকির উল্লেখযোগ্য পারফরম্যান্স ওভারহেড। এটি রানটাইমে প্রয়োজনীয় পয়েন্টের নিকটবর্তী ফিল্টারটিকে যোগ / সরিয়ে দিয়ে সীমাবদ্ধ সময়ের জন্য কেবলমাত্র ফিল্টারিং দ্বারা হ্রাস করা যেতে পারে।
রুরস্ট

4

এটি সম্পূর্ণ উত্তর নয় তবে কিছু দিকনির্দেশ: প্রদর্শিত যে কোনও পাঠ্য একটি অনুবাদ ফিল্টারকে ছাড়িয়ে গেছে এবং তাই কলব্যাক ফাংশনে (হুক) পরিবর্তিত হতে পারে। সুতরাং যদি হুকটি কেবলমাত্র সেই পৃষ্ঠাটিতে নিবন্ধিত হয় যেখানে আপনি এটি পরিবর্তন করতে চান, কাজ শেষ হয়েছে।

সিএসএসের মাধ্যমে লুকিয়ে খসড়া বোতামটি "সরানো" হতে পারে। সিএসএসকে <head>অন্য কলব্যাকের সাহায্যে অ্যাডমিনের -ট্যাগে ইনজেকশন দেওয়া যেতে পারে । আমি মনে করি ফিল্টারটি তার admin_headজন্য কল করা হয়েছিল। বোতামটি এখনও রয়েছে বলে এটি কোনওরকম নোংরা, উদাহরণস্বরূপ যদি কোনও ব্যবহারকারী সিএসএস বন্ধ করে দেয়।


3

ধারাবাহিকতার জন্য, আমি ধরে নিচ্ছি আপনি কেবলমাত্র বোতামের টেক্সটের পরিবর্তে ওয়ার্ডপ্রেস জুড়ে "প্রকাশ" এর পরিবর্তে "সংরক্ষণ করুন" ব্যবহার করতে পছন্দ করবেন।

মেটা বক্স

পোস্ট তালিকা

@ রর্স্ট দ্বারা প্রদত্ত সমাধানের ভিত্তিতে, আমি কোডটি প্রসারিত করেছি যাতে এটি "প্রকাশ করুন" শব্দের অনেকগুলি (সমস্ত?) অনুবাদগুলিকে "সংরক্ষণ" এর যথাযথ প্রকরণে অনুবাদ করে।

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;
}

খসড়া বোতামটি অপসারণের জন্য, @ টসচোর দেওয়া উত্তরে একটি ভাল সমাধান রয়েছে।


বিজ্ঞপ্তি: অপরিজ্ঞাত পরিবর্তনশীল: গুলি
আমজাদ

@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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.