Как изменить текст кнопки Опубликовать?

Есть ли способ изменить текст кнопки Опубликовать в пользовательском типе поста? А также убрать кнопку черновика?

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 5
  1. rinogo

    Вот например:

    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;
    }
    
  2. fuxia

    Если вы загляните в /wp-admin/edit-form-advanced.php , вы найдете мета-поле:

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

    Обратите внимание на __('Publish') — функция __() приводит к translate() , где вы получаете фильтр 'gettext' .

    Существует два способа решения вашей проблемы: 1. Адрес строки в одной специализированной функции (убедитесь, что она соответствует правильному текстовому домену!) или 2. Используйте более общий подход.

    <?php
    /*
    Plugin Name: Retranslate
    Description: Adds translations.
    License:     GPL v2
    */
    
    class Toscho_Retrans {
        // сохранить параметры
        protected $params;
    
        /**
         * @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 );
    
            // Когда добавляется фильтр
            $hook = 'backend' == $this->params['context'] 
                ? 'admin_head' : 'template_redirect';
    
            add_action( $hook, array ( $this, 'register_filter' ) );
        }
    
        /**
         * Контейнер для add_filter()
         * @return void
         */
        public function register_filter()
        {
            add_filter( 'gettext', array ( $this, 'translate' ), 10, 3 );
        }
    
        /**
         * @param  string $translated
         * @param  string $original
         * @param  string $domain
         * @return string
         */
        public function translate( $translated, $original, $domain )
        {
            // ранний выход
            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;
            }
    
            // Наконец заменить
            return strtr( $original, $this->params['replacements'] );
        }
    }
    
    
    // Заменить 'Publish' на 'Save'
    $Toscho_Retrans = new Toscho_Retrans(
        array (
            'replacements' => array ( 
                'Publish' => 'Save'
            ,   'Preview' => 'Lurk' 
            )
        ,   'post_type'    => array ( 'page', 'post' )
        )
    );
    

    Вам не нужно использовать код в качестве плагина. Достаточно будет включить его в functions.php вашей темы.

    ОБНОВЛЕНО

    Чтобы удалить исходную кнопку «Сохранить», добавьте следующий код в ваш файл functions.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. fuxia♦

      Удалить кнопку сохранения очень сложно, потому что post_submit_meta_box() просто выгружает содержимое. Нет фильтра вообще. Javascript или ob_start() могут решить эту проблему.

  3. The J

    Например, так:

    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);
    
  4. Rarst
    add_filter( 'gettext', 'change_publish_button', 10, 2 );
    
    function change_publish_button( $translation, $text ) {
    
    if ( $text == 'Publish' )
        return 'Save';
    
    return $translation;
    }
    
Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: