¿Hay alguna manera 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?
fuente
¿Hay alguna manera 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 meta:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Tenga en cuenta que la __('Publish')
función __()
lleva a translate()
donde obtiene el filtro 'gettext'
.
Hay dos formas de manejar su problema: 1. Aborde 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 acaba de publicar 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 necesita usar el código como complemento. Incluirlo en las funciones de tu tema.php será suficiente.
Para eliminar el botón Guardar original (no estoy seguro de cuál es el botón 'borrador'), agregue el siguiente código a su 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
}
Si, es feo.
post_submit_meta_box()
solo descarga su contenido. Sin filtro en absoluto. Javascript oob_start()
podría resolver eso. Ambos no muy elegantes.El código para la sugerencia de hakre de usar el filtro de traducción sería algo como esto:
fuente
Esta no es una respuesta completa, sino algunas instrucciones: cualquier texto visualizado 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 donde desea cambiar eso, el trabajo está hecho.
El botón de borrador se puede "eliminar" ocultándolo a través de CSS. El CSS podría inyectarse en la
<head>
etiqueta del administrador con otra devolución de llamada. Creo que el filtro se llamaadmin_head
para eso. De alguna manera está sucio ya que el botón todavía está allí, por ejemplo, si un usuario apaga CSS.fuente
Por coherencia, supongo que preferiría usar "Guardar" en lugar de "Publicar" en Wordpress en lugar de solo en el texto del botón.
Basado en la solución provista por @Rarst, expandí el código para que traduzca muchas (¿todas?) Otras instancias de la palabra "Publicar" a la variación apropiada de "Guardar".
Para eliminar el botón Borrador, la respuesta dada por @toscho contiene una buena solución.
fuente
%1$s
a%1\$s
. O, al desactivar los avisos / advertencias se ocultarán estos errores.Otro enfoque sería cancelar el registro del metabox, luego volver a registrar ese mismo cuadro con diferentes valores, nombrando el texto de publicación.
Vea la discusión que tuve aquí sobre mover un cuadro de meta, debería poder aplicar algo similar para cambiar el nombre de ese texto de publicación.
fuente
Simplemente puede encontrar el botón a través de jQuery e intercambiar el nodo de texto por otra cosa. Eso sería pan comido.
fuente
Una solución mucho más limpia y fácil.
fuente