Gibt es eine Möglichkeit, den Text der Veröffentlichungsschaltfläche in einem benutzerdefinierten Beitragstyp zu ändern, um etwas anderes auszudrücken? Beispiel: Speichern statt veröffentlichen. Und auch den Zugluftknopf entfernen?
Gibt es eine Möglichkeit, den Text der Veröffentlichungsschaltfläche in einem benutzerdefinierten Beitragstyp zu ändern, um etwas anderes auszudrücken? Beispiel: Speichern statt veröffentlichen. Und auch den Zugluftknopf entfernen?
Antworten:
Wenn Sie nachsehen /wp-admin/edit-form-advanced.php
, finden Sie die Meta-Box:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Beachten Sie, dass __('Publish')
- die Funktion dazu __()
führt, translate()
wo Sie den Filter erhalten 'gettext'
.
Es gibt zwei Möglichkeiten, um mit Ihrem Problem umzugehen: 1. Adressieren Sie die Zeichenfolge in einer einzigen speziellen Funktion (achten Sie darauf, dass Sie mit der richtigen Textdomäne übereinstimmen!) Oder 2. Verwenden Sie einen allgemeineren Ansatz.
@Rarst hat gerade Version 1 gepostet, daher füge ich Version 2 hinzu. :)
<?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' )
)
);
Sie müssen den Code nicht als Plugin verwenden. Es reicht aus, es in die functions.php deines Themas aufzunehmen.
Um die ursprüngliche Schaltfläche "Speichern" zu entfernen (nicht sicher, was die Schaltfläche "Entwurf" ist), fügen Sie den folgenden Code zu Ihrer Datei functions.php / a hinzu:
add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}
Ja, es ist hässlich.
post_submit_meta_box()
nur der Inhalt ausgegeben wird. Überhaupt kein Filter. Javascript oder ob_start()
könnte das lösen. Beides nicht sehr elegant.
Der Code für den Vorschlag von hakre, den Übersetzungsfilter zu verwenden, würde ungefähr so lauten:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
Dies ist keine vollständige Antwort, aber einige Anweisungen: Jeder angezeigte Text übersteigt einen Übersetzungsfilter und kann daher in einer Rückruffunktion (Hook) geändert werden. Wenn der Haken also nur auf der Seite registriert ist, auf der Sie das ändern möchten, ist die Aufgabe erledigt.
Die Entwurfsschaltfläche kann durch Ausblenden über CSS "entfernt" werden. Das CSS könnte <head>
mit einem anderen Rückruf in den -tag des Administrators eingefügt werden. Ich denke der Filter heißt admin_head
dafür. Es ist irgendwie dreckig, da die Schaltfläche noch vorhanden ist, zum Beispiel, wenn ein Benutzer CSS ausschaltet.
Aus Gründen der Konsistenz gehe ich davon aus, dass Sie in Wordpress lieber "Speichern" als "Veröffentlichen" verwenden möchten, anstatt nur auf den Text der Schaltfläche zuzugreifen.
Basierend auf der von @Rarst bereitgestellten Lösung habe ich den Code so erweitert, dass er viele (alle?) Andere Instanzen des Wortes "Veröffentlichen" in die entsprechende Variante von "Speichern" übersetzt.
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;
}
Zum Entfernen der Schaltfläche "Entwurf" enthält die Antwort von @toscho eine gute Lösung.
%1$s
to zu ändern %1\$s
. Wenn Sie Benachrichtigungen / Warnungen deaktivieren, werden diese Fehler ausgeblendet.
Ein anderer Ansatz wäre, die Registrierung der Metabox aufzuheben und dasselbe Feld mit unterschiedlichen Werten neu zu registrieren, nämlich den Veröffentlichungstext.
In der Diskussion, die ich hier über das Verschieben eines Metakastens geführt habe, sollten Sie in der Lage sein, etwas Ähnliches anzuwenden, um diesen Veröffentlichungstext umzubenennen.
Viel sauberere und einfachere Lösung.
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);