¿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?
¿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?
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.
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.
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;
}
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.
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.
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.
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.
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);
Lea otras preguntas en las etiquetas custom-post-types wp-admin translation