Ubah Judul Kotak Meta

8

Saya mencoba membuat fungsi yang memungkinkan saya untuk mengubah judul kotak meta yang sudah ada (yaitu, mengubah judul Kotak Meta 'Penulis' menjadi 'Tim', dll.)

Saya tidak ingin menggunakan JS atau harus menghapus kotak meta asli dan menambahkannya kembali.

Saya mulai dengan yang berikut sesuai utas lain yang mencantumkan kode seperti ini:

// hook to the 'add_meta_boxes' action
add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles($post_type, $post)) {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want
}

Saya terjebak pada bagian untuk "menelusuri array dan mengubah judul yang Anda inginkan".

Apa cara terbaik untuk mencapai ini? Menggunakan foreach untuk mengulang? Atau skenario Beralih / Kasus? Saya cukup baru dalam hal ini, adakah yang bisa memberikan contoh bagaimana mencapai ini?

Pembaruan: Contoh Stephen Harris tidak berfungsi untuk Core Meta (terima kasih!):

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want

    $wp_meta_boxes['post']['normal']['core']['authordiv']['title']= 'Team Member';
}

Pembaruan: Diperbaiki Untuk Meta Kustom

Agar ini berfungsi dengan meta khusus Anda, ubah add_action Anda sebagai berikut sehingga kode perubahan judul Anda diaktifkan setelah kotak meta ditambahkan:

add_action('add_meta_boxes', 'change_meta_box_titles', 999);
Syrehn
sumber

Jawaban:

11

Jawaban yang ditingkatkan

Saya telah memutuskan untuk meninjau kembali pertanyaan ini setelah menyadari betapa anehnya peretasan itu.

Solusi terbaik adalah menghapus metabox, dan kemudian menambahkan kembali, menentukan judul alternatif. Berikut adalah contoh untuk tipe posting posting.

add_action( 'add_meta_boxes_post',  'wpse39446_add_meta_boxes' );
function wpse39446_add_meta_boxes() {
    remove_meta_box( 'authordiv', 'post', 'core' );
    add_meta_box( 'authordiv', __('Team Member','wpse39446_domain'), 'post_author_meta_box', 'post', 'core', 'high' );
}

Catatan: Jika Anda melakukan ini untuk metabox non-inti, Anda harus memastikan panggilan balik dipanggil setelah metabox ditambahkan dengan menetapkan prioritas yang lebih tinggi.


Jadi, $wp_meta_boxesmemiliki banyak array bersarang

Untuk keperluan Anda:

$wp_meta_boxes['post_type']['normal']['core']['authordiv']['title']= 'teams';

(NB. Saya tidak yakin apakah ada argumen yang dilewati untuk tindakan itu ...:

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want
}

Sebenarnya struktur array lebih rumit. Saya telah memperbarui kode saya. Saya sudah menguji ini dan berhasil: D (Pastikan Anda mengubah 'post_type'ke jenis posting, misalnya 'posting').

Secara longgar struktur array adalah tipe-post> priority> core> metabox ID.

Jika Anda ingin melihat array untuk diri Anda sendiri, di dalam fungsi Anda gunakan:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
Stephen Harris
sumber
Stephen Harris aku bisa menciummu. Itu bekerja seperti pesona, terima kasih banyak! Saya terlalu rumit kode saya sepertinya ketika saya mencoba untuk menyelesaikannya sendiri.
Syrehn
Senang membantu: D
Stephen Harris
Hmm ... Saya mencoba ini dengan kotak meta khusus yang saya buat "projectinfo" adalah id unik metabox jadi saya mencoba ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; tapi itu tidak berhasil, apakah saya melewatkan sesuatu di sini?
Syrehn
Coba echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');Setelah Anda mengubah judul untuk melihat apa yang salah. Dugaan saya adalah bahwa itu bukan 'inti': D
Stephen Harris
Saya menambahkan bahwa, meta khusus tidak muncul di cantuman. Jadi Anda mungkin benar itu bukan 'inti'.
Syrehn
2

Saya tahu ini adalah pertanyaan lama, tetapi ada hook filter untuk ini. Anda akan menambahkan ke plugin tema functions.phpatau fungsionalitas khusus Anda fungsi yang dikaitkanpost_type_labels_{$post_type}

Ambil contoh bahwa kita memiliki jenis posting khusus yang dipanggil banddan kami ingin mengubah label gambar unggulan menjadi "Band Photo". Fungsi akan terlihat seperti ini:

function wpse39446_modify_featured_image_labels( $labels ) {
  $labels->featured_image = __( 'Band Photo', 'textdomain' );
  $labels->set_featured_image = __( 'Set Band Photo', 'textdomain' );
  $labels->remove_featured_image = __( 'Remove Band Photo', 'textdomain' );
  $labels->use_featured_image = __( 'Use as Band Photo', 'textdomain' );

  return $labels;
}
add_filter( 'post_type_labels_band', 'wpse39446_modify_featured_image_labels', 10, 1 );

ref: https://developer.wordpress.org/reference/hooks/post_type_labels_post_type/

Kacang
sumber
1

Afaik, taruhan terbaik Anda adalah mengaitkan fungsi ke pengait tepat sebelum pembuatan kotak meta:

function alter_meta_box_titles( $post_type, $priority, $post )
{
    global $wp_meta_boxes;

    // Do check if you're on the right $post_type, $priority, etc.
    // Then alter the output
    foreach( $wp_meta_boxes as $index => $box )
        $wp_meta_boxes[ $index]['title'] = 'CUSTOM TITLE';

    return $wp_meta_boxes;
}
add_action( 'do_meta_boxes', 'alter_meta_box_titles', 0, 3);
kaisar
sumber
0

Oke ... Ini sedikit berantakan, tapi saya pikir itu pintar. Pada dasarnya, Anda hanya menggunakan fungsi bahasa bawaan untuk mengubah apa yang Anda suka. Selama Anda tahu kata atau kata-kata asli yang ingin Anda ubah dan kata-kata itu telah dipanggil dalam kode dengan sesuatu seperti __('text in here'), Anda dapat mengubahnya menjadi apa pun yang Anda suka.

Saya pernah menggunakannya untuk mengubah kotak meta "Kutipan" ke nama yang berbeda (bersama dengan deskripsi di dalamnya) karena tema saya menggunakannya untuk potongan teks yang sangat kecil. Lihat:

/**
 * Here are some customizations that change text output via the gettext filter.
 * This was intended for translating themes to other languages, but why not
 * use it for more customization?
 *
 * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/gettext
 *
 */
add_filter( 'gettext', 'change_excerpt_name', 20, 3 );
function change_excerpt_name( $translated_text, $text, $domain ) {

    if( $_GET['post_type'] == 'events' ) {

        switch ( $translated_text ) {

            case 'Excerpt' :

                $translated_text = 'Quick Summary';
                break;

            case 'Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href="%s">Learn more about manual excerpts</a>.' :

                $translated_text = 'Use this field to REALLY condense the description of this event.  Keep it around 12 words or less if possible. If you skip this field, the first few words in the area above will be used instead.';
                break;

        }

    }

    return $translated_text;
}

Ternyata, saya bukan satu-satunya yang memikirkan hal ini. Mengherankan. Berikut ini adalah artikel yang membahas ide yang sama , dengan metode berbeda menggunakan gettext.

Mengenakan
sumber
0

Sejak WordPress 4.4 arg $ screen dapat berupa array yang sangat menyederhanakan penambahan massal atau perubahan kotak meta.

Kode berikut mengubah judul kotak meta “Pembuat” menjadi “Editor” di halaman, posting, lampiran, dan semua jenis posting khusus, tidak peduli berapa banyak yang ditambahkan atau ketika ditambahkan ke situs Anda.

add_action('do_meta_boxes', 'my_customize_meta_boxes'); //using do_meta_boxes also allows plugin metaboxes to be modified
function my_customize_meta_boxes(){
  $post_types = get_post_types();
  remove_meta_box( 'authordiv', $post_types, 'normal' );
  add_meta_box('authordiv', __('Editor'), 'post_author_meta_box', $post_types, 'side', 'default');
}
membanting
sumber
0

Ini agak membingungkan, tetapi bagi siapa pun yang membutuhkan solusi CSS sederhana, gunakan ini:

.meta-box-sortables #your-metabox-id .ui-sortable-handle span {
    color: transparent;
}

.meta-box-sortables #your-metabox-id .ui-sortable-handle span:before {
    content: 'Your new title';
    display: inline-block;
    color: #000;
}

Cukup ganti metabox-id Anda dengan milik Anda. :)

(catatan: saya biasanya menambahkan admin.css melalui functions.php, di situlah saya mengontrol beberapa gaya admin wp)

un.pez.vivo
sumber