我可以强制将Metabox放在一列中吗?

时间:2013-07-17 作者:Charlie Chao

假设我为添加/编辑帖子页面创建了一个自定义元框,该页面使用了较宽的宽度(不适合放在侧栏中),是否有办法将其仅保留在中间列并可排序,同时不允许用户将其拖动到侧栏?

2 个回复
最合适的回答,由SO网友:Charlie Chao 整理而成

首先,感谢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问题是,用户在侧边栏区域上拖动元框时,仍然可以看到占位符框。这可能会让用户误以为他们第一次对框进行排序时失败了。

SO网友:iyrin

如果希望元框显示在内容区域下方,请使用上下文参数“normal”。看见Function Reference/add meta box - Parameters. 最初,只有当上下文参数设置为“side”时,元框才应转到侧栏。

至于让用户无法将其拖到一边,请在以下位置研究答案“Block metabox - No expanding, no moving around“这方面的一些指导。

编写一个函数,向postbox处理的postbox元素添加自定义类。js由于您希望使元框可排序,同时将其限制在内容区域下方的列中,请查看是否可以发现postbox.js 确定是在内容下方还是在侧栏上设置邮箱。您似乎希望它出现在#poststuff中,而不是出现在#side Sortable中。我目前没有一个脚本来做这件事,但希望这能让你朝着正确的方向前进。

结束

相关推荐

使用WP_QUERY或QUERY_POSTS()或GET_POSTS()来优化站点?

我已经阅读了其他答案,但我不知道哪一个更快(对于运行缓慢的服务器来说是最好和最简单的)?我有一个每天点击量超过100万次的网站,服务器速度慢,数据库连接有限,所以我想优化我的网站。您建议我使用什么:WP\\u Query或Query\\u posts()或get\\u posts()?如果我想在不同的位置以不同的样式显示文章,我可以在我显示的每一篇文章上重复函数[WP\\u Query or Query\\u posts()或get\\u posts()],还是最好使用一次,如果$I==1,2,3用于不同