Ö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?
Ö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:
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.
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.
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.
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;
}
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.
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.
@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.
%1$s
için %1\$s
. Veya bildirimleri / uyarıları kapatmak bu hataları gizleyecektir.
Ç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);