Hiding a theme's meta box

时间:2016-09-28 作者:AdamJones

我必须为某人更新一个网站,该网站是用其中一个(不是很好,笨重)预先制作的主题构建的。该主题(实际上是父主题,称为Mineral)在站点的所有帖子和页面编辑页面中插入一个元框,并具有各种布局选项。

我想为不同的页面隐藏这个。因此,为了使其正常工作,我尝试了普通代码:

function remove_page_excerpt_field() {
    remove_meta_box( \'pexeto-meta-page-boxes\' , \'page\' , \'normal\' ); 
}
add_action( \'admin_menu\' , \'remove_page_excerpt_field\' );
在哪里pexeto-meta-page-boxes 是元框外部div的id的名称。但这不起作用。

我过去也有过这个问题,但从来没有找到问题的根源。我想这是由于某种优先问题。有没有办法设置我的remove_meta_box() 具有更高优先级的函数来覆盖父主题的编码器定义的任何内容?

2 个回复
最合适的回答,由SO网友:Naresh Kumar P 整理而成

Remove WordPress Meta Boxes

您必须使用调用的函数remove meta box.

Description:从给定帖子类型的特定帖子编辑屏幕中删除元框或任何其他元素。它还可以用于从仪表板屏幕中删除小部件。

从WordPress仪表板中删除元框的步骤:

当删除WordPress元框时,我看到它以多种不同的方式完成,其中两种通常是通过JavaScript完成的。虽然这对许多人来说都很有用,但客户端解决方案并不总是很好,尤其是在与可访问性相关的时候。

最重要的是,通过JavaScript隐藏东西是一种黑客行为——元素的可见性通常应该根据CSS设置,当DOM加载时元素被隐藏时,它可能会引起一点闪烁。

总之,我经常看到的两种方法是:

开发人员在屏幕选项下查找复选框,然后触发click事件。

开发人员嗅出元框ID,然后使用jQuery’s hide() 方法从页面隐藏元框。

当然,这些都是可行的,但您仍然面临着可访问性的挑战,并且您正在修改一些可能应该通过CSS完成的内容。

除非有挂钩。

这正是我们作为WordPress开发人员在试图在仪表板和前端引入、删除或修改任何与WordPress相关的内容时应该具备的心态。

具体而言,我们需要问问自己:

考虑到我需要做的事情,是否有一个钩子可以实现这一点?

这就是这种情况(很多很多情况下),有。我们可以利用default_hidden_meta_boxes

Using The Hook

该函数接受两个参数:

应隐藏的元框数组当前显示的屏幕允许我们修改现有的隐藏元框数组(或创建我们自己的),并仅在特定屏幕上触发它。

假设我们有一个自定义的post类型acme_post_type 我们想隐藏类别、作者、文章摘录和Slug元框。

<?php
add_action( \'default_hidden_meta_boxes\', \'acme_remove_meta_boxes\', 10, 2 );
/**
 * Removes the category, author, post excerpt, and slug meta boxes.
 *
 * @since    1.0.0
 *
 * @param    array    $hidden    The array of meta boxes that should be hidden for Acme Post Types
 * @param    object   $screen    The current screen object that\'s being displayed on the screen
 * @return   array    $hidden    The updated array that removes other meta boxes
 */
function acme_remove_meta_boxes( $hidden, $screen ) {
    if ( \'acme_post_type\' == $screen->id ) {
        $hidden = array(
            \'acme_post_type_categorydiv\',
            \'authordiv\',
            \'postexcerpt\',
            \'slugdiv\'
            );

    }
    return $hidden;    
}
首先,代码检查是否在屏幕上显示自定义帖子类型。如果是这样,那么我们定义一个新的数组,其中包含要隐藏的元框的ID。之后,我们将数组转换为WordPress,函数的最终结果是指定的元框将从视图中隐藏。

在获取要隐藏的元框的ID方面,可以使用首选浏览器的开发人员工具检查页面上的元素。

如何在WordPress中删除元框的另一个示例。

// REMOVE POST META BOXES
function remove_my_post_metaboxes() {
remove_meta_box( \'authordiv\',\'post\',\'normal\' ); // Author Metabox
remove_meta_box( \'commentstatusdiv\',\'post\',\'normal\' ); // Comments Status Metabox
remove_meta_box( \'commentsdiv\',\'post\',\'normal\' ); // Comments Metabox
remove_meta_box( \'postcustom\',\'post\',\'normal\' ); // Custom Fields Metabox
remove_meta_box( \'postexcerpt\',\'post\',\'normal\' ); // Excerpt Metabox
remove_meta_box( \'revisionsdiv\',\'post\',\'normal\' ); // Revisions Metabox
remove_meta_box( \'slugdiv\',\'post\',\'normal\' ); // Slug Metabox
remove_meta_box( \'trackbacksdiv\',\'post\',\'normal\' ); // Trackback Metabox
}
add_action(\'admin_menu\',\'remove_my_post_metaboxes\');
将以下代码放在函数文件中(Appearance > Editor > Theme Functions – functions.php).

放置该代码应该会删除帖子编辑器下面的所有元框,并给你一个漂亮、干净的外观。

SO网友:Benoti

您可以尝试使用admin\\u init钩住您的函数。

add_action(\'admin_init\', \'remove_page_excerpt_field\');

function remove_page_excerpt_field(){
    remove_meta_box( \'pexeto-meta-page-boxes\' , \'page\' , \'normal\' ); 
}
或者只是remove_action(\'the_function_used_by_the_theme_to_add_metabox\', 10, 1); 使用与add\\u操作相同的优先级和参数号。

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {