更改Meta Box的标题

时间:2012-01-19 作者:Syrehn

我正在尝试创建一个函数,允许我更改已建立元框的标题(即,将元框标题“Authors”更改为“Team”,等等)

我不想使用JS,也不想取消设置原始元框并重新添加它。

根据另一个列出代码的线程,我从以下内容开始:

// 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
}
我被困在“循环数组并更改您想要的标题”的部分。

实现这一目标的最佳方式是什么?使用foreach循环?还是切换/案例场景?我对这方面比较陌生,有谁能举例说明如何做到这一点?

Update: Stephen Harris的例子确实适用于Core Meta(谢谢!):

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

Update: Fixed For Custom Meta\'s

要使其与自定义元的更改一起工作,请执行如下add\\u操作,以便在添加元框后激发更改标题代码:

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

6 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

改进了答案,在意识到这个问题有多么不必要的骇客之后,我决定重新讨论这个问题。

最好的解决方案是删除元框,然后重新添加,并指定一个替代标题。这里有一个post post类型的示例。

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\' );
}
Note: 如果要对非核心元盒执行此操作,则需要通过指定更高的优先级来确保在添加元盒后调用回调。

所以,$wp_meta_boxes 有很多嵌套数组

出于您的目的:

$wp_meta_boxes[\'post_type\'][\'normal\'][\'core\'][\'authordiv\'][\'title\']= \'teams\';
(注意,我不确定是否有任何参数传递给该操作…:

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
}
实际上,阵列结构更为复杂。我已经更新了代码。我已经对此进行了测试,效果良好:D(请确保您进行了更改\'post_type\' 到post类型,例如“post”)。

松散地说,数组的结构是post类型>;优先级(>);核心(>);metabox ID。

如果要自己查看数组,请在函数内部使用:

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

SO网友:Pea

我知道这是一个老问题,但有一个过滤器挂钩。您将添加到您的主题functions.phpcustom functionality plugin 连接到的函数post_type_labels_{$post_type}

例如,我们有一个名为band 我们想将特色图片标签改为“Band Photo”。函数如下所示:

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 );
参考号:https://developer.wordpress.org/reference/hooks/post_type_labels_post_type/

SO网友:kaiser

好吧,您最好的选择是在创建元框之前将函数挂接到挂钩上:

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

SO网友:Slam

由于WordPress 4.4,$screen arg可以是一个数组,它可以大大简化元框的大量添加或更改。

以下代码将页面、帖子、附件和所有自定义帖子类型上的“Author”元框的标题更改为“Editor”,无论添加了多少帖子或何时添加到站点。

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

SO网友:un.pez.vivo

这有点老套,但对于任何需要简单CSS解决方案的人,请使用以下方法:

.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;
}
只需将您的元盒id替换为您自己的id即可。:)

(注意:我通常通过functions.php添加admin.css,这是我控制一些wp管理样式的地方)

SO网友:Don

可以这有点老套,但我觉得它很聪明。基本上,您只需使用内置的语言函数来更改您喜欢的内容。只要您知道要更改的一个或多个原始单词,并且它们已在代码中正确调用,例如__(\'text in here\'), 你可以把它们换成你喜欢的任何东西。

我曾经用它将“摘录”元框更改为不同的名称(以及内部描述),因为我的主题将其用于非常小的文本。看看:

/**
 * 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;
}
事实证明,我不是唯一一个想到这一点的人。惊喜这是一个article discussing the same idea, 使用不同的gettext方法。

结束