Thay đổi tiêu đề của một hộp Meta


8

Tôi đang cố gắng tạo một chức năng cho phép tôi thay đổi tiêu đề của một hộp meta đã được thiết lập (nghĩa là thay đổi tiêu đề của Meta Box 'Tác giả' thành 'Đội', v.v.)

Tôi không muốn sử dụng JS hoặc phải bỏ đặt hộp meta gốc và thêm lại nó.

Tôi đã bắt đầu với những điều sau theo một chủ đề khác liệt kê mã như vậy:

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

Tôi bị mắc kẹt một phần để "xoay vòng qua mảng và thay đổi tiêu đề bạn muốn".

Điều gì sẽ là cách tốt nhất để thực hiện điều này? Sử dụng một foreach để lặp? Hoặc một kịch bản Switch / Case? Tôi khá mới về điều này, bất cứ ai cũng có thể cung cấp một ví dụ về cách thực hiện điều này?

Cập nhật: Ví dụ của Stephen Harris hoạt động cho Core Meta's (cảm ơn!):

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

Cập nhật: Đã sửa lỗi cho Meta Custom

Để làm cho điều này hoạt động với meta tùy chỉnh của bạn, hãy thay đổi add_action của bạn như sau để nó kích hoạt mã tiêu đề thay đổi của bạn sau khi hộp meta được thêm vào:

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

Câu trả lời:


11

Câu trả lời được cải thiện

Tôi đã quyết định xem lại câu hỏi này sau khi nhận ra rằng nó bị hack một cách vô cớ như thế nào.

Giải pháp tốt nhất là loại bỏ metabox, sau đó thêm lại, chỉ định một tiêu đề thay thế. Đây là một ví dụ cho loại bài đăng.

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

Lưu ý: Nếu bạn đang thực hiện việc này cho một metabox không cốt lõi, bạn sẽ cần đảm bảo cuộc gọi lại được gọi sau khi metabox được thêm bằng cách chỉ định mức độ ưu tiên cao hơn.


Vì vậy, $wp_meta_boxescó rất nhiều mảng lồng nhau

Đối với mục đích của bạn:

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

(NB. Tôi không chắc có bất kỳ đối số nào được chuyển cho hành động đó không ...:

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
}

Trên thực tế cấu trúc mảng phức tạp hơn. Tôi đã cập nhật mã của mình. Tôi đã thử nghiệm cái này và nó hoạt động: D (Chỉ cần đảm bảo bạn thay đổi 'post_type'loại bài đăng, ví dụ: 'bài').

Cấu trúc của mảng là dạng hậu kỳ> ưu tiên> lõi> ID metabox.

Nếu bạn muốn xem mảng cho chính mình, bên trong hàm của bạn sử dụng:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');

Stephen Harris tôi có thể hôn bạn. Điều đó làm việc như một cơ duyên, cảm ơn rất nhiều! Tôi đã quá phức tạp mã của mình, dường như khi tôi đang cố gắng tự mình sắp xếp nó.
Sygnn

Vui mừng được giúp đỡ: D
Stephen Harris

Hmm ... Tôi đã thử điều này với một hộp meta tùy chỉnh mà tôi đã tạo "projectinfo" là id duy nhất metabox vì vậy sau đó tôi đã thử ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; nhưng nó không hoạt động, tôi có bỏ lỡ điều gì ở đây không?
Sygnn

Hãy thử echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');Sau khi bạn thay đổi tiêu đề để xem có gì sai. Tôi đoán là nó không phải là "cốt lõi": D
Stephen Harris

Tôi đã thêm rằng, meta tùy chỉnh không hiển thị trong danh sách. Vì vậy, bạn có khả năng chính xác nó không phải là một "cốt lõi".
Sygnn

2

Tôi biết đây là một câu hỏi cũ, nhưng có một móc lọc cho việc này. Bạn sẽ thêm vào plugin chức năng tùy chỉnhfunctions.php hoặc chủ đề của mình một chức năng được nối vớipost_type_labels_{$post_type}

Lấy ví dụ rằng chúng tôi có một loại bài đăng tùy chỉnh được gọi bandvà chúng tôi muốn thay đổi nhãn hình ảnh nổi bật thành "Band Photo". Hàm này sẽ trông giống như thế này:

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/


1

Afaik, đặt cược tốt nhất của bạn sẽ là móc một hàm vào hook ngay trước khi tạo hộp 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);

0

Được rồi ... Đây là một chút hack, nhưng tôi nghĩ rằng nó là thông minh. Về cơ bản, bạn chỉ cần sử dụng các chức năng ngôn ngữ tích hợp để thay đổi những gì bạn thích. Miễn là bạn biết từ gốc hoặc từ bạn muốn thay đổi và chúng đã được gọi đúng trong mã với một cái gì đó giống như __('text in here'), bạn có thể thay đổi chúng thành bất cứ điều gì bạn thích.

Tôi đã từng sử dụng nó để thay đổi hộp meta "Trích dẫn" thành một tên khác (cùng với mô tả bên trong) vì chủ đề của tôi đã sử dụng nó cho các đoạn văn bản cực kỳ nhỏ. Có một cái nhìn:

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

Hóa ra, tôi không phải là người duy nhất nghĩ về điều này. Sự ngạc nhiên. Dưới đây là một bài viết thảo luận về cùng một ý tưởng , với một phương pháp sử dụng gettext khác.


0

Vì WordPress 4.4, $ screen arg có thể là một mảng giúp đơn giản hóa rất nhiều việc bổ sung hoặc thay đổi hàng loạt các hộp meta.

Đoạn mã sau đây thay đổi tiêu đề của hộp meta meta Author Author thành chín mươi trên các trang, bài đăng, tệp đính kèm và tất cả các loại bài đăng tùy chỉnh cho dù có thêm bao nhiêu hoặc khi chúng được thêm vào trang web của bạn.

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

0

Đây là một chút khó khăn, nhưng đối với bất kỳ ai cần một giải pháp CSS đơn giản, hãy sử dụng:

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

Chỉ cần thay thế id-metabox của bạn bằng id của riêng bạn. :)

(lưu ý: tôi thường thêm admin.css thông qua hàm.php, đó là nơi tôi kiểm soát một số kiểu quản trị wp)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.