Existe uma maneira de alterar o texto do botão de publicação em um tipo de postagem personalizado para dizer algo diferente? Por exemplo, salve em vez de publicar. E também remover o botão de rascunho?
Existe uma maneira de alterar o texto do botão de publicação em um tipo de postagem personalizado para dizer algo diferente? Por exemplo, salve em vez de publicar. E também remover o botão de rascunho?
Respostas:
Se você olhar /wp-admin/edit-form-advanced.php
, encontrará a caixa meta:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Observe a __('Publish')
- a função __()
leva para translate()
onde você obtém o filtro 'gettext'
.
Há duas maneiras de lidar com o seu problema: 1. Aborde a string em uma única função especializada (certifique-se de corresponder ao domínio de texto correto!) Ou 2. use uma abordagem mais genérica.
A @Rarst acaba de publicar a versão 1, então adicionarei a versão 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' )
)
);
Você não precisa usar o código como um plug-in. Incluí-lo nas funções do seu tema.php será suficiente.
Para remover o botão Salvar original (não sei ao certo qual é o botão 'rascunho'), adicione o seguinte código ao seu 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
}
Sim, é feio.
post_submit_meta_box()
apenas despeja seu conteúdo. Nenhum filtro. Javascript ou ob_start()
poderia resolver isso. Ambos não são muito elegantes.
O código para a sugestão do hakre de usar o filtro de tradução seria algo como isto:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
Esta não é uma resposta completa, mas algumas orientações: Qualquer texto exibido ultrapassa um filtro de tradução e, portanto, pode ser alterado em uma função de retorno de chamada (gancho). Portanto, se o gancho estiver registrado apenas na página em que você deseja alterar isso, trabalho feito.
O botão de rascunho pode ser "removido" ocultando-o via CSS. O CSS pode ser injetado na <head>
tag-do administrador com outro retorno de chamada. Eu acho que o filtro é chamado admin_head
para isso. De alguma forma, está sujo, pois o botão ainda está lá, por exemplo, se um usuário desativar o CSS.
Por uma questão de consistência, suponho que você prefira usar "Salvar" em vez de "Publicar" no Wordpress, em vez de apenas no texto do botão.
Com base na solução fornecida pelo @Rarst, ampliei o código para converter muitas (todas?) Outras instâncias da palavra "Publicar" na variação apropriada de "Salvar".
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 remover o botão Rascunho, a resposta dada por @toscho contém uma boa solução.
%1$s
para %1\$s
. Ou, desativar avisos / avisos ocultará esses erros.