Changer le texte sur le bouton Publier

19

Existe-t-il un moyen de changer le texte du bouton Publier sur un type de message personnalisé pour en dire un autre? Par exemple, enregistrer au lieu de publier. Et aussi supprimer le bouton brouillon?

    
posée Paul Sheldrake 02.11.2010 - 23:29

7 réponses

15

Si vous regardez dans /wp-admin/edit-form-advanced.php , vous trouverez la boîte de méta:

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

Notez le __('Publish') - la fonction __() conduit à translate() où vous obtenez le filtre 'gettext' .

Il existe deux manières de gérer votre problème: 1. Adressez la chaîne dans une seule fonction spécialisée (veillez à bien faire correspondre le textdomain correct!) ou 2. Utilisez une approche plus générique.

@Rarst a tout à l'heure posté la version 1, je vais donc ajouter la version 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' )
    )
);

Vous n'avez pas besoin d'utiliser le code en tant que plugin. L'inclure dans le fichier functions.php de votre thème suffira.

Mettre à jour

Pour supprimer le bouton d’enregistrement original (vous ne savez pas ce qu’est le bouton "brouillon"), ajoutez le code suivant à votre fichier functions.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
}

Oui, c'est moche.

    
réponse donnée fuxia 05.11.2010 - 09:08
11

Le code pour la suggestion de hakre d'utiliser un filtre de traduction ressemblerait à ceci:

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

function change_publish_button( $translation, $text ) {

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

return $translation;
}
    
réponse donnée Rarst 05.11.2010 - 07:44
4

Ceci n'est pas une réponse complète mais quelques indications: Tout texte affiché dépasse un filtre de traduction et peut donc être modifié dans une fonction de rappel (hook). Donc, si le crochet n’est enregistré que sur la page sur laquelle vous souhaitez changer, le travail est fait.

Le bouton de brouillon peut être "supprimé" en le masquant via CSS. Le CSS pourrait être injecté dans la <head> -tag de l'administrateur avec un autre rappel. Je pense que le filtre s'appelle admin_head pour cela. C'est en quelque sorte sale car le bouton est toujours là, par exemple si un utilisateur désactive CSS.

    
réponse donnée hakre 04.11.2010 - 03:23
2

Une autre approche serait d'annuler l'enregistrement de la métabox, puis de réenregistrer cette même boîte avec des valeurs différentes, nommément le texte de publication.

Voir la discussion sur ici sur En déplaçant une boîte méta, vous devriez pouvoir appliquer quelque chose de similaire pour renommer le texte de publication.

    
réponse donnée t31os 05.11.2010 - 11:40
2

Par souci de cohérence, je suppose que vous préféreriez utiliser "Enregistrer" au lieu de "Publier" dans Wordpress plutôt que sur le texte du bouton.

[email protected],j'aidéveloppélecodepourqu'iltraduisedenombreusesautres(toutes?)instancesdumot"Publier" en une variante appropriée de "Enregistrer".

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

Pour supprimer le bouton Brouillon, la réponse donnée par @toscho contient une bonne solution.

    
réponse donnée rinogo 23.06.2016 - 04:32
0

Vous pouvez simplement trouver le bouton via jQuery et permuter le nœud de texte pour autre chose. Ce serait un morceau de gâteau à faire.

    
réponse donnée Dan Gayle 05.11.2010 - 03:53
0

Beaucoup plus propre & solution plus facile.

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);
    
réponse donnée The J 24.08.2016 - 16:50

Lire d'autres questions sur les étiquettes