Yayınla düğmesindeki metni değiştirin


21

Özel bir yazı tipinde yayınla düğmesinin metnini farklı bir şey söylemek için değiştirmenin bir yolu var mı? Örneğin, Yayınla yerine Kaydet. Ve ayrıca taslak düğmesini kaldır?

Yanıtlar:


16

Eğer bakarsanız /wp-admin/edit-form-advanced.php, meta kutusunu bulacaksınız:

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

__('Publish')- fonksiyonunun , filtrenin nereden alındığı ile __()sonuçlandığını unutmayın .translate()'gettext'

Sorunu çözmenin iki yolu vardır: 1. Dizgiyi tek bir özel fonksiyonda ele alın (doğru metin alanı ile eşlediğinizden emin olun!) Veya 2. daha genel bir yaklaşım kullanın.

@Rarst şimdi sürüm 1'i gönderdi, bu yüzden sürüm 2'yi ekleyeceğim :)

<?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' )
    )
);

Kodu bir eklenti olarak kullanmanıza gerek yoktur. Temalarınızın fonksiyonlarına dahil etmek yeterlidir. Php yeterli olacaktır.

Güncelleştirme

Orijinal Kaydet düğmesini kaldırmak için ('taslak' düğmesinin ne olduğundan emin değilsiniz), functions.php / a eklentisine şu kodu ekleyin:

add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{   
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}

Evet, çirkin.


1
Bu sürüm 20 gibi daha fazla :) Müthiş kod!
Rarst

Ben de beğendim. Diğer düğmeyi gizlemek için hala kayıp.
hakre

Kaydet düğmesini kaldırmak gerçekten zor çünkü post_submit_meta_box()içeriğini dışarı atıyor. Hiçbir filtre yok. Javascript veya ob_start()bunu çözebilir. Her ikisi de çok şık değil.
fuxia

Hm, tamam, orijinal Kaydet düğmesini kaldırmak için bir kod ekledim. Çok zor değildi. :)
fuxia

Bunu açıklamak için kelimeleri özlüyorum :) - ve daha önce de söylemiştim: diziyi biçimlendirmek için virgül kullanımı PHP Formatters Award +1+ 'yi hakediyor
brasofilo

11

Hakre'nin çeviri filtresi kullanma önerisinin kodu şöyle olurdu:

add_filter( 'gettext', 'change_publish_button', 10, 2 );

function change_publish_button( $translation, $text ) {

if ( $text == 'Publish' )
    return 'Save';

return $translation;
}

"Versiyon 1" in (@toscho tarafından yazılmış mevcut kabul edilmiş cevabın) bu yaklaşımdan daha üstün / düşük olmasının sebepleri var mı? Bu benim için ikisinin daha iyi gibi görünüyor - daha basit, "Kaydet" düğmesini kaldırmak için kesmek gerektirmez ve daha gelecek kanıtıdır.
rinogo

Cevabınız bana ilham verdi - çok daha fazla dizgiyi ele alma yaklaşımınızı geliştirdim. wordpress.stackexchange.com/a/230513/10388
rinogo

2
Dezavantajı, çeviri filtresinin birçok kez yanması, buna bağlı olmanın ek yüke bağlı olması olacaktır. Bu, çalışma zamanındaki gerekli noktaya yakın filtreyi ekleyerek / kaldırarak yalnızca sınırlı bir süre için filtreleme yaparak azaltılabilir.
Rarst

4

Bu tam bir cevap değildir, ancak bazı talimatlar vardır: Görüntülenen herhangi bir metin çeviri filtresini aştığından, geri arama işlevinde (kanca) değiştirilebilir. Kanca, yalnızca bunu değiştirmek istediğiniz sayfaya kaydedilmişse iş tamamlanmıştır.

Taslak butonu, CSS ile gizlenerek "kaldırılabilir". CSS <head>, yönetici -tag'ına başka bir geri arama ile enjekte edilebilir . Bunun için filtrenin çağrıldığını düşünüyorum admin_head. Düğme hala orada olduğu için bir şekilde kirli, örneğin bir kullanıcı CSS'yi kapatırsa.


3

Tutarlılık için, yalnızca düğme metni yerine Wordpress'te "Yayınla" yerine "Kaydet" seçeneğini kullanmayı tercih edeceğinizi farz ediyorum.

Meta kutusu

Gönderi listesi

@Rarst tarafından sağlanan çözüme dayanarak, kodu "Yayımla" kelimesinin bir çok (tümü?) Diğer örneğini "Kaydet" in uygun varyasyonuna çevirecek şekilde genişlettim.

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

Taslak düğmesini kaldırmak için @toscho tarafından verilen cevap iyi bir çözüm içeriyor.


Uyarı: Tanımsız değişken: s
Amjad

@Amjad - tüm örneklerini değiştirmeyi deneyin %1$siçin %1\$s. Veya bildirimleri / uyarıları kapatmak bu hataları gizleyecektir.
rinogo

Hata ayıklama için uyarıları ve uyarıları tutmam gerekiyor. Ama bunun için teşekkürler. Hatalar artık ekleyerek göstermiyor \
Amjad

2

Başka bir yaklaşım meta kutusunun kaydını silmek, ardından aynı kutuyu farklı değerlerle yeniden kaydetmek, yani metni yayınlamak olacaktır.

Bir meta kutusu taşıma ile ilgili burada yaptığım tartışmaya bakın, o metni yayınla yeniden adlandırmaya benzer bir şey uygulayabilmelisiniz.


0

Düğmeyi jQuery ile bulabilir ve metin düğümünü başka bir şeyle değiştirebilirsiniz. Bu yapılacaklar için çok kolay olacak.


0

Çok daha temiz ve daha kolay bir çözüm.

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.