Apakah ada cara untuk mengubah teks tombol publikasikan pada jenis posting kustom untuk mengatakan beberapa berbeda? Misalnya, Simpan alih-alih Terbitkan. Dan juga hapus tombol draft?
Apakah ada cara untuk mengubah teks tombol publikasikan pada jenis posting kustom untuk mengatakan beberapa berbeda? Misalnya, Simpan alih-alih Terbitkan. Dan juga hapus tombol draft?
Jawaban:
Jika Anda melihat ke dalam /wp-admin/edit-form-advanced.php
, Anda akan menemukan kotak meta:
add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core');
Perhatikan __('Publish')
- fungsi __()
mengarah ke translate()
tempat Anda mendapatkan filter'gettext'
.
Ada dua cara untuk menangani masalah Anda: 1. Alamat string dalam satu fungsi khusus (pastikan untuk mencocokkan domain teks yang benar!) Atau 2. gunakan pendekatan yang lebih umum.
@Rarst baru saja memposting versi 1, jadi saya akan menambahkan versi 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' )
)
);
Anda tidak perlu menggunakan kode sebagai plugin. Menyertakannya di functions.php tema Anda akan cukup.
Untuk menghapus tombol Simpan asli (tidak yakin apa tombol 'draft' itu), tambahkan kode berikut ke plugin functions.php / a Anda:
add_action( 'admin_print_footer_scripts', 'remove_save_button' );
function remove_save_button()
{
?>
<script>
jQuery(document).ready(function($){$('#save-post').remove();});
</script><?php
}
Ya, itu jelek.
post_submit_meta_box()
hanya membuang isinya. Tidak ada filter sama sekali. Javascript atau ob_start()
bisa menyelesaikannya. Keduanya tidak terlalu elegan.
Kode untuk saran hakre untuk menggunakan filter terjemahan adalah seperti ini:
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( $text == 'Publish' )
return 'Save';
return $translation;
}
Ini bukan jawaban lengkap tetapi beberapa petunjuk: Teks apa pun yang ditampilkan melampaui filter terjemahan dan karenanya dapat diubah dalam fungsi panggilan balik (pengait). Jadi, jika kait hanya terdaftar pada halaman di mana Anda ingin mengubahnya, pekerjaan sudah selesai.
Tombol konsep dapat "dihapus" dengan menyembunyikannya melalui CSS. CSS dapat disuntikkan ke <head>
-tag admin dengan panggilan balik lain. Saya pikir filter dipanggil admin_head
untuk itu. Entah bagaimana kotor karena tombol masih ada di sana, misalnya jika pengguna mematikan CSS.
Untuk konsistensi, saya berasumsi Anda lebih suka menggunakan "Simpan" daripada "Terbitkan" di seluruh Wordpress daripada hanya pada teks tombol.
Berdasarkan solusi yang disediakan oleh @Rarst, saya memperluas kode sehingga menerjemahkan banyak (semua?) Contoh lain dari kata "Terbitkan" ke variasi yang sesuai dari "Simpan".
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;
}
Untuk menghapus tombol Draft, jawaban yang diberikan oleh @toscho berisi solusi yang baik.
%1$s
menjadi %1\$s
. Atau, mematikan pemberitahuan / peringatan akan menyembunyikan kesalahan ini.
Pendekatan lain akan membatalkan registrasi metabox, kemudian mendaftar ulang kotak yang sama dengan nilai yang berbeda, yaitu teks yang dipublikasi ..
Lihat diskusi yang saya lakukan di sini mengenai pemindahan kotak meta, Anda seharusnya dapat menerapkan sesuatu yang mirip dengan mengganti nama teks yang Diterbitkan itu.