首先,感谢RyanLoremIpsum为我指明了正确的方向。我已经找到了问题的解决方案,它使用了Ryan建议的帖子中的方法Block metabox - No expanding, no moving around 答案来自jQuery UI Sortable - prevent dropping on one particular list 限制特定项目掉落到另一个放置区域。
在限制将元数据库放入侧栏的情况下,以下是如何使其工作的:
添加筛选器类.no-sidebar
到您的metabox元素。
通过使用postbox_classes_post_METABOX_NAME
过滤器,我们可以包括自定义类,以便在创建特定元盒时附加到该元盒。
public function my_normal_metabox( $classes ) {
$classes[] = \'no-sidebar\';
return $classes;
}
add_filter( \'postbox_classes_post_my_meta_box\', array( $this, \'my_normal_metabox\' ) );
在管理页面中添加页脚脚本块以限制
.no-sidebar
元框不会被放到提要栏中。
在这里,我们以普通容器(包含非侧栏小部件)为目标来绑定jQuery UI Sortable widget beforeStop
事件检查侧栏容器是否与接收有关.no-sidebar
代谢箱。如果是,返回false
取消放置。
function my_admin_print_footer_scripts()
{
?><script type="text/javascript">/* <![CDATA[ */
jQuery(function($) {
$("#normal-sortables")
.sortable({ beforeStop: function (event, ui) {
if ($("#side-sortables").find(\'.no-sidebar\').length) {
// can the sort before adding the element to the sidebar
return false;
}
} })
// refresh the instance
.sortable(\'refresh\');
});
/* ]]> */</script><?php
}
add_action( \'admin_print_footer_scripts\', array( $this, \'my_admin_print_footer_scripts\' ), 99 );
此方法可确保将来的任何元盒
no-sidebar
只能在普通容器中排序。潜在的UX问题是,用户在侧边栏区域上拖动元框时,仍然可以看到占位符框。这可能会让用户误以为他们第一次对框进行排序时失败了。