web-dev-qa-db-de.com

Ändern Sie den Text auf der Schaltfläche Veröffentlichen

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?

21
Paul Sheldrake

Wenn Sie in /wp-admin/edit-form-advanced.php schauen, finden Sie die Meta-Box:

add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');

Beachten Sie die __('Publish') - die Funktion __() führt zu translate(), wo Sie den Filter 'gettext' erhalten.

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 erst 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.

Aktualisieren

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.

16
fuxia

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;
}
11
Rarst

Dies ist keine vollständige Antwort, aber einige Anweisungen: Jeder angezeigte Text übertrifft 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 mit einem anderen Rückruf in das <head>- -Tag des Administrators eingefügt werden. Ich denke, der Filter heißt dafür admin_head. Es ist irgendwie schmutzig, da die Schaltfläche noch vorhanden ist, zum Beispiel, wenn ein Benutzer CSS ausschaltet.

4
hakre

Aus Gründen der Konsistenz gehe ich davon aus, dass Sie in Wordpress "Speichern" anstelle von "Veröffentlichen" anstatt nur auf den Text der Schaltfläche verwenden möchten.

 Meta box 

 Post list 

Basierend auf der von @Rarst bereitgestellten Lösung habe ich den Code so erweitert, dass er viele (alle?) Andere Instanzen des Wortes "Publish" in die entsprechende Variante von "Save" ü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.

3
rinogo

Ein anderer Ansatz wäre, die Registrierung der Metabox aufzuheben und dasselbe Feld mit unterschiedlichen Werten neu zu registrieren, nämlich den Veröffentlichungstext.

Sehen Sie sich die Diskussion an, die ich hier über das Verschieben einer Meta-Box geführt habe. Sie sollten in der Lage sein, etwas Ähnliches anzuwenden, um diesen Veröffentlichungstext umzubenennen.

2
t31os

Sie können die Schaltfläche einfach über jQuery finden und den Textknoten gegen etwas anderes austauschen. Das wäre ein Kinderspiel.

0
Dan Gayle

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);
0
The J