更改元框的标题


8

我正在尝试创建一个函数,使我可以更改已建立的元框的标题(即,将元框的标题“作者”更改为“团队”等)。

我不想使用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循环?还是切换/案例方案?我在这方面还很陌生,谁能提供一个有关如何完成此操作的示例?

更新: 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';
}

更新:修复了自定义元的

为了使它与您的自定义元一起工作,请按以下方式更改add_action,以便在添加元框后触发您的更改标题代码:

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

Answers:


11

改善答案

在意识到这是多么不必要的麻烦之后,我决定重新考虑这个问题。

最好的解决方案是删除元框,然后重新添加它,并指定其他标题。这是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' );
}

注意:如果您要对非核心metabox执行此操作,则需要通过指定更高的优先级来确保在添加metabox之后调用了回调函数。


所以,$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-type> priority> core> metabox ID。

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

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

斯蒂芬·哈里斯(Stephen Harris)我可以吻你。就像魅力一样,非常感谢!当我试图自行解决时,我的代码过于复杂。
赛伦(Syrehn)2012年

很高兴为您提供帮助:D
Stephen Harris

嗯...我尝试使用创建的自定义元框创建了“ projectinfo”,这是metabox的唯一ID,所以我尝试了... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; 但是那没用,我在这里错过了什么吗?
Syrehn

echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');更改标题后,请尝试查看出了什么问题。我的猜测是,它不是“核心”:D
Stephen Harris

我补充说,自定义meta不会显示在清单中。因此,您可能会纠正它不是“核心”。
赛伦(Syrehn)2012年

2

我知道这是一个老问题,但是对此有一个过滤器挂钩。您将在主题functions.php自定义功能插件中添加一个功能挂钩post_type_labels_{$post_type}

例如,我们有一个名为的自定义帖子类型,band并且我们想要将特色图像标签更改为“带照片”。该函数将如下所示:

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/


1

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

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

好吧...这有点怪,但是我有点觉得这很聪明。基本上,您只是使用内置的语言功能来更改所需的内容。只要您知道要更改的一个或多个原始单词,并且已在代码中使用诸如适当地将它们调出__('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;
}

事实证明,我并不是唯一想到这一点的人。惊喜 这是一篇文章,讨论了相同的想法,但使用gettext的方法不同。


0

从WordPress 4.4开始,$ screen arg可以是一个数组,从而大大简化了元框的大量添加或更改。

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

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

这有点麻烦,但是对于需要简单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;
}

只需将your-metabox-id替换为您自己的即可。:)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.