删除Metabox用于“ slug”而无需删除功能
-
16-10-2019 - |
题
这是一个有趣的问题。
我最近注意到,如果您使用代码
remove_meta_box('slugdiv', 'post', 'normal');
当您单击页面标题下的URL lug时,实际上无法修改sl。
要澄清,当您将remove_meta_box用于slugdiv时,Metabox和屏幕选项将被删除,但是您仍然可以单击“帖子标题”下的URL进行编辑...但是,当您转到更新/发布帖子时无论您进行的任何修改都不会进行。
我的目的是从“邮政编辑”屏幕上删除相同的Metabox,并将其从屏幕选项页面中删除,但我想确保在邮政标题下编辑slug时,这仍然有效。
谁能为此问题提供解决方案?提前致谢。
解决方案 2
我最终只是将以下CSS添加到我在函数中调用的CSS文件。管理区域:PHP文件:
[for="slugdiv-hide"] {
display: none;
}
#slugdiv {
display: none;
}
这删除了屏幕选项和Metabox,同时仍允许我编辑标题下的URL。
更新
根据FXFUTURE提供的答案,我通过扩展了他的代码,并包括屏幕选项的CSS值和SLUG METABOX的CSS值,同时确保代码仅包含在post-new.php和post.php页面上。
// HIDE THE SLUG METABOX AND SLUG SCREEN OPTIONS
function hide_slug_options() {
global $post;
global $pagenow;
$hide_slugs = "<style type=\"text/css\">#slugdiv, #edit-slug-box, [for=\"slugdiv-hide\"] { display: none; }</style>\n";
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php') print($hide_slugs);
}
add_action( 'admin_head', 'hide_slug_options' );
其他提示
允许邮寄标题下的Slug版本的盒子实际上与Slug Metabox绑在一起。它需要它工作。因此,删除Metabox会破坏它。
我认为,唯一的解决方案是使用JavaScript或CSS隐藏它。这样的事情将起作用:
function hide_slug_box() {
global $post;
global $pagenow;
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php') {
echo "<script type='text/javascript'>
jQuery(document).ready(function($) {
jQuery('#edit-slug-box').hide();
});
</script>
";
}
}
add_action( 'admin_head', 'hide_slug_box' );
您应该在add_meta_boxes挂钩中调用remove_meta_box以使其正常工作。它在4.0上进行了测试。
add_action( 'add_meta_boxes', 'customize_admin_backend_cpt',0 );
function customize_admin_backend_cpt () {
remove_meta_box( 'slugdiv', 'your_cpt_goes_here', 'normal' );
}
而不是编辑您的CSS文件,可以在您的functions.php中使用它:
function hide_all_slugs() {
global $post;
$hide_slugs = "<style type=\"text/css\"> #slugdiv, #edit-slug-box { display: none; }</style>";
print($hide_slugs);
}
add_action( 'admin_head', 'hide_all_slugs' );