Altere o texto no botão Publicar

19

Existe uma maneira de alterar o texto do botão de publicação em um tipo de postagem personalizada para dizer algo diferente? Por exemplo, Salvar em vez de Publicar. E também remover o botão de rascunho?

    
por Paul Sheldrake 02.11.2010 / 23:29

7 respostas

15

Se você olhar em /wp-admin/edit-form-advanced.php , encontrará a meta box:

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

Observe o __('Publish') - a função __() leva a translate() , onde você obtém o filtro 'gettext' .

Existem duas maneiras de lidar com o seu problema: 1. Enderece a string em uma única função especializada (certifique-se de combinar o texto correto!) ou 2. use uma abordagem mais genérica.

@Rarst lançou agora a versão 1, então adicionarei a versão 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' )
    )
);

Você não precisa usar o código como um plugin. Incluindo-o nas funções do seu tema.php será suficiente.

Atualizar

Para remover o botão Salvar original (não sei qual é o botão 'rascunho'), adicione o seguinte código ao seu plugin 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
}

Sim, é feio.

    
por fuxia 05.11.2010 / 09:08
11

O código para a sugestão de hakre de usar o filtro de tradução seria algo assim:

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

function change_publish_button( $translation, $text ) {

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

return $translation;
}
    
por Rarst 05.11.2010 / 07:44
4

Esta não é uma resposta completa, mas algumas direções: qualquer texto exibido ultrapassa um filtro de tradução e, portanto, pode ser alterado em uma função de retorno de chamada (hook). Então, se o gancho só é registrado na página onde você gostaria de mudar isso, trabalho feito.

O botão de rascunho pode ser "removido", ocultando-o via CSS. O CSS pode ser injetado na <head> -tag do admin com outro retorno de chamada. Eu acho que o filtro é chamado admin_head para isso. Está de alguma forma sujo como o botão ainda está lá, por exemplo, se um usuário desliga CSS.

    
por hakre 04.11.2010 / 03:23
2

Outra abordagem seria cancelar o registro do metabox e, em seguida, registrar novamente a mesma caixa com valores diferentes, nomeando o texto da publicação.

Veja a discussão que eu tive aqui sobre Ao mover uma caixa meta, você deve poder aplicar algo semelhante para renomear Publicar texto.

    
por t31os 05.11.2010 / 11:40
2

Por questão de consistência, suponho que você prefira usar "Salvar" em vez de "Publicar" em todo o Wordpress, em vez de apenas no texto do botão.

Combasenasoluçãofornecidapelo@Rarst,euexpandiocódigoparaqueeletraduzamuitas(todas?)outrasinstânciasdapalavra"Publicar" para a variação apropriada de "Salvar".

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

Para remover o botão Rascunho, a resposta dada por @toscho contém uma boa solução.

    
por rinogo 23.06.2016 / 04:32
0

Você pode apenas encontrar o botão via jQuery e trocar o nó de texto por outra coisa. Isso seria um pedaço de bolo para fazer.

    
por Dan Gayle 05.11.2010 / 03:53
0

Muito mais limpo & solução mais fácil.

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);
    
por The J 24.08.2016 / 16:50