Czy istnieje sposób na zmianę tekstu przycisku publikowania w niestandardowym typie postu, aby powiedzieć coś innego? Na przykład Zapisz zamiast Publikuj. A także usunąć przycisk wersji roboczej?
źródło
Czy istnieje sposób na zmianę tekstu przycisku publikowania w niestandardowym typie postu, aby powiedzieć coś innego? Na przykład Zapisz zamiast Publikuj. A także usunąć przycisk wersji roboczej?
Jeśli zajrzysz /wp-admin/edit-form-advanced.php
, znajdziesz meta box:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Uwaga __('Publish')
- funkcja __()
prowadzi do translate()
miejsca, w którym otrzymujesz filtr 'gettext'
.
Istnieją dwa sposoby rozwiązania problemu: 1. Zaadresuj ciąg w jednej specjalizowanej funkcji (pamiętaj, aby dopasować poprawną domenę tekstową!) Lub 2. zastosuj bardziej ogólne podejście.
@Rarst właśnie opublikował wersję 1, więc dodam wersję 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' )
)
);
Nie musisz używać kodu jako wtyczki. Dołączenie go do funkcji twojego motywu. Php wystarczy.
Aby usunąć oryginalny przycisk Zapisz (nie jestem pewien, co to jest przycisk „wersja robocza”), dodaj następujący kod do swojego functions.php / wtyczki:
add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}
Tak, to brzydkie.
post_submit_meta_box()
po prostu zrzuca jego zawartość. W ogóle brak filtra. JavaScript lubob_start()
może to rozwiązać. Oba niezbyt eleganckie.Kod sugerujący hakre użycie filtra tłumaczącego byłby mniej więcej taki:
źródło
To nie jest pełna odpowiedź, ale niektóre wskazówki: Każdy wyświetlany tekst przekracza filtr tłumaczenia i dlatego można go zmienić w funkcji wywołania zwrotnego (hook). Więc jeśli hak jest zarejestrowany tylko na stronie, na której chcesz to zmienić, zadanie wykonane.
Przycisk wersji roboczej można „usunąć”, ukrywając go za pomocą CSS. CSS może zostać wstrzyknięty do
<head>
-tag administratora z innym wywołaniem zwrotnym. Myślę, że do tego potrzebny jest filtradmin_head
. Jest jakoś brudny, ponieważ przycisk wciąż tam jest, na przykład, jeśli użytkownik wyłączy CSS.źródło
Dla zachowania spójności zakładam, że wolisz używać opcji „Zapisz” zamiast „Publikuj” w całym Wordpressie zamiast samego tekstu przycisku.
W oparciu o rozwiązanie dostarczone przez @Rarst rozszerzyłem kod, aby tłumaczył wiele (wszystkie?) Innych wystąpień słowa „Publikuj” na odpowiednią odmianę „Zapisz”.
Do usunięcia przycisku Szkic odpowiedź udzielona przez @toscho zawiera dobre rozwiązanie.
źródło
%1$s
na%1\$s
. Lub wyłączenie powiadomień / ostrzeżeń ukryje te błędy.Innym podejściem byłoby wyrejestrowanie metaboxa, a następnie ponowne zarejestrowanie tego samego pola z różnymi wartościami, czyli nazewnictwo tekstu publikacji.
Zobacz dyskusję, którą tutaj przeprowadziłem, dotyczącą przeniesienia meta-boxa, powinieneś być w stanie zastosować coś podobnego do zmiany nazwy tego Publikuj tekst.
źródło
Możesz po prostu znaleźć przycisk za pomocą jQuery i zamienić węzeł tekstowy na coś innego. To by było bułka z masłem.
źródło
Znacznie czystsze i łatwiejsze rozwiązanie.
źródło