Измените текст на кнопке Publish

Существует ли способ изменить текст опубликовать кнопки на пользовательском типе сообщения для высказывания некоторых отличающихся? Например, Сохраните вместо, Публикуют. И также удалите черновую кнопку?

21
14.11.2013, 16:50
5 ответов

Если Вы изучаете /wp-admin/edit-form-advanced.php, Вы найдете meta поле:

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' )
    )
);

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

Обновление

Для удаления исходной кнопки Save (не уверенный, что 'черновая' кнопка) добавьте следующий код к functions.php/a плагину:

add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{   
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}

Да, это ужасно.

16
19.02.2020, 21:56
  • 1
    Это больше похоже на версию 20 :) Потрясающий код! –  Rarst 05.11.2010, 10:22
  • 2
    мне нравится он также. Все еще отсутствуя для сокрытия другой кнопки. –  hakre 06.11.2010, 20:49
  • 3
    Удаление кнопки сохранения действительно трудно, потому что post_submit_meta_box() просто разгрузил его содержание. Никакой фильтр вообще. JavaScript или ob_start() мог решить это. Оба не очень изящные. –  fuxia♦ 06.11.2010, 23:21
  • 4
    Гм, хорошо, я добавил некоторый код для удаления исходной кнопки Save. Не было так твердо. :) –  fuxia♦ 06.11.2010, 23:55
  • 5
    я пропускаю слова для описания этого :) - и сказал это прежде: использование запятой для форматирования массива заслуживает Премии Средств форматирования PHP +1 +, –  brasofilo 17.05.2012, 17:45

Код для предложения hakre для использования фильтра перевода был бы чем-то вроде этого:

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

function change_publish_button( $translation, $text ) {

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

return $translation;
}
11
19.02.2020, 21:56
  • 1
    Есть ли причины, почему "версия 1" (текущий принятый ответ, записанный @toscho), является превосходящей/нижней этого подхода? Это, кажется, лучше двух мне - более просто, не требует, чтобы взломы удалили кнопку "Save" и более соответствует требованиям завтрашнего дня. –  rinogo 23.06.2016, 03:53
  • 2
    Ваш ответ вдохновил меня - я развил Ваш подход для покрытия намного большего количества строк. wordpress.stackexchange.com/a/230513/10388 –  rinogo 23.06.2016, 05:33
  • 3
    , которым оборотная сторона была бы то, что фильтр перевода запускает много времен, сцепляющихся в него, является значительной производительностью наверху. Это может быть уменьшено, только фильтруя на ограниченный срок путем добавления/удаления фильтра близко к необходимой точке во времени выполнения. –  Rarst 29.06.2016, 16:24

Это не полный ответ, но некоторые направления: Любой отображенный текст превосходит фильтр перевода и может поэтому быть изменен в функции обратного вызова (рычаг). Таким образом, если бы рычаг только регистрируется на странице, где требуется изменить это, сделанное задание.

Черновая кнопка могла быть "удалена" путем сокрытия его с помощью CSS. CSS мог быть введен в <head>- тег администратора с другим обратным вызовом. Я думаю, что фильтр называют admin_head для этого. Это так или иначе грязно, как кнопка все еще там, например, если пользователь выключает CSS.

4
19.02.2020, 21:56

Другой подход был бы нерегистром метаполе, затем потворил бы регистрацию того же самого поля с отличающимися значениями, namingly опубликовать текст..

Посмотрите обсуждение, которое я имел здесь относительно перемещения meta поля, необходимо смочь применить что-то подобное для переименования, которые Публикуют текст.

2
19.02.2020, 21:56

Вы могли просто найти кнопку с помощью jQuery и подкачать текстовый узел для чего-то еще. Это было бы куском пирога, чтобы сделать.

0
19.02.2020, 21:56

Теги

Похожие вопросы