Cambie el texto en el botón Publicar

19

¿Hay alguna forma de cambiar el texto del botón de publicación en un tipo de publicación personalizada para decir algo diferente? Por ejemplo, Guardar en lugar de Publicar. ¿Y también eliminar el botón de borrador?

    
pregunta Paul Sheldrake 02.11.2010 - 23:29

7 respuestas

15

Si observa /wp-admin/edit-form-advanced.php , encontrará el cuadro de meta:

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

Tenga en cuenta que __('Publish') : la función __() lleva a translate() donde obtiene el filtro 'gettext' .

Hay dos formas de resolver su problema: 1. Dirija la cadena en una sola función especializada (¡asegúrese de que coincida con el dominio de texto correcto!) o 2. use un enfoque más genérico.

@Rarst ha justo ahora publicado la versión 1, así que agregaré la versión 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' )
    )
);

No es necesario utilizar el código como complemento. Incluirlo en las funciones de tu tema.php será suficiente.

Actualizar

Para eliminar el botón Guardar original (sin estar seguro de lo que es el botón 'borrador'), agregue el siguiente código a sus funciones.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
}

Sí, es feo.

    
respondido por el fuxia 05.11.2010 - 09:08
11

El código para la sugerencia de hakre de usar un filtro de traducción sería algo como esto:

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

function change_publish_button( $translation, $text ) {

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

return $translation;
}
    
respondido por el Rarst 05.11.2010 - 07:44
4

Esto no es una respuesta completa, pero sí algunas indicaciones: cualquier texto que se muestre supera un filtro de traducción y, por lo tanto, se puede cambiar en una función de devolución de llamada (enlace). Entonces, si el gancho solo está registrado en la página en la que desea cambiar eso, trabajo hecho.

El botón de borrador podría "eliminarse" ocultándolo a través de CSS. El CSS podría ser inyectado en la etiqueta <head> -tag del administrador con otra devolución de llamada. Creo que el filtro se llama admin_head para eso. De alguna manera está sucio porque el botón aún está allí, por ejemplo, si un usuario desactiva CSS.

    
respondido por el hakre 04.11.2010 - 03:23
2

Otro enfoque sería anular el registro del metabox, luego volver a registrar esa misma casilla con diferentes valores, nombrando el texto de publicación ..

Vea la discusión que tuve aquí con respecto a moviendo un meta box, deberías poder aplicar algo similar para cambiar el nombre de ese texto de publicación.

    
respondido por el t31os 05.11.2010 - 11:40
2

Por coherencia, supongo que preferirías usar "Guardar" en lugar de "Publicar" en Wordpress en lugar de solo en el texto del botón.

Basándomeenlasoluciónprovistapor@Rarst,expandíelcódigoparaquetraduzcamuchas(¿todas?)otrasinstanciasdelapalabra"Publicar" a la variación apropiada de "Guardar".

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 eliminar el botón Borrador, la respuesta dada por @toscho contiene una buena solución.

    
respondido por el rinogo 23.06.2016 - 04:32
0

Puedes encontrar el botón a través de jQuery e intercambiar el nodo de texto por otra cosa. Eso sería un pedazo de pastel para hacer.

    
respondido por el Dan Gayle 05.11.2010 - 03:53
0

Mucho más limpio & solución más 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);
    
respondido por el The J 24.08.2016 - 16:50

Lea otras preguntas en las etiquetas