Existe-t-il un moyen de modifier le texte du bouton de publication sur un type de publication personnalisé pour en dire différents? Par exemple, enregistrez au lieu de publier. Et aussi supprimer le bouton brouillon?
Existe-t-il un moyen de modifier le texte du bouton de publication sur un type de publication personnalisé pour en dire différents? Par exemple, enregistrez au lieu de publier. Et aussi supprimer le bouton brouillon?
Réponses:
Si vous regardez /wp-admin/edit-form-advanced.php
, vous trouverez la méta-boîte:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Notez la __('Publish')
- la fonction __()
mène à l' translate()
endroit où vous obtenez le filtre 'gettext'
.
Il existe deux façons de gérer votre problème: 1. Adressez la chaîne dans une seule fonction spécialisée (assurez-vous de faire correspondre le bon domaine de texte!) Ou 2. utilisez une approche plus générique.
@Rarst vient de publier 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 comme plugin. L'inclure dans les fonctions de votre thème.php sera suffisant.
Pour supprimer le bouton Enregistrer d'origine (vous ne savez pas quel est le bouton `` brouillon ''), ajoutez le code suivant à votre 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
}
Oui, c'est moche.
post_submit_meta_box()
suffit de vider son contenu. Pas de filtre du tout. Javascript ou ob_start()
pourrait résoudre ce problème. Les deux ne sont pas très élégants.
Le code pour la suggestion de hakre d'utiliser le filtre de traduction serait quelque chose comme ceci:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
Ce 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 où vous souhaitez changer cela, le travail est fait.
Le bouton brouillon pourrait être "supprimé" en le masquant via CSS. Le CSS pourrait être injecté dans le <head>
-tag de l'administrateur avec un autre rappel. Je pense que le filtre est appelé admin_head
pour cela. C'est en quelque sorte sale car le bouton est toujours là, par exemple si un utilisateur désactive CSS.
Par souci de cohérence, je suppose que vous préférez utiliser "Enregistrer" au lieu de "Publier" dans Wordpress au lieu de simplement sur le texte du bouton.
Sur la base de la solution fournie par @Rarst, j'ai développé le code afin qu'il traduise de nombreuses (toutes?) Autres instances du mot "Publier" dans la 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.
%1$s
en %1\$s
. Ou, la désactivation des notifications / avertissements masquera ces erreurs.
Une autre approche serait de désenregistrer 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 que j'ai eue ici concernant le déplacement d'une méta-boîte, vous devriez être en mesure d'appliquer quelque chose de similaire pour renommer ce texte de publication.
Solution beaucoup plus propre et 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);