MetaBox Layout for all users

时间:2013-11-24 作者:imudo

我想知道:你是管理员:当你在页面或帖子中重新排序元框的布局时,此布局将与你的用户profile一起保存:例如,你将类别框拖到发布框之前。。。

是否可以为其他用户(编辑、作者等)保存此布局?

是否可以为每种类型的用户组织布局,而不必使用他们的帐户登录?

谢谢你的帮助!

4 个回复
SO网友:s_ha_dum

这是一个粗略的提纲,但类似的内容应该可以:

假设有一个具有已知用户ID的“主”用户—您的管理员或为此目的创建的用户user settings are checked 看看箱子是否被移动过interrupt that check with a filter on get_user_option_{$option}.把这些放在一起:

function force_user_option_wpse_124330($option) {
  remove_filter(\'get_user_option_meta-box-order_post\',\'force_user_option_wpse_124330\');
  return get_user_option(\'meta-box-order_post\', 1); // 1 is the known user ID
}
add_filter(\'get_user_option_meta-box-order_post\',\'force_user_option_wpse_124330\');
我对这样做有严重的疑虑。这很可能会给用户带来困惑。即使过滤器的草图可以工作,或者您可以让它工作,我也会考虑为除“master”用户之外的任何用户禁用metabox拖动。

对于其他带有要劫持的元框的页面,您必须执行非常类似的操作。

SO网友:Sudeep K Rana

您可以使用对元盒排序的排序行为。

add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args );

有优先事项($priority) 显示。我的想法是给他们所有人相同的优先级,但保持他们的id按顺序排列。

例如:如果我想在*b\\u meta\\u box*之前显示*c\\u meta\\u box*,那么我会像这样注册我的meta box。

add_meta_box(\'a_c_meta_box\',\'C META BOX\',\'c_meta_box_cb\',\'post\',\'normal\',\'default\');
add_meta_box(\'b_b_meta_box\',\'B META BOX\',\'b_meta_box_cb\',\'post\',\'normal\',\'default\');
注意:我是如何更改框的id并添加a\\u和b\\u对其进行排序的。你也可以添加数字。给所有人相同的$priority 但已排序id。

我知道这不是一个完美的解决方案,但它在这种情况下有效。

要进行故障排除,可以使用此代码查看global $wp_meta_boxes 像这样:

global $wp_meta_boxes;
    echo "<pre>";
    print_r($wp_meta_boxes);
    echo "</pre>";
其他参考资料:Widget API Codex

注意:在对现有元框进行更改后,单击“发布”按钮一次以保存元框更改的id。

SO网友:tobek

我同意这是一种不好的做法,因为你把控制权从用户手中夺走了,可能会让他们感到困惑,但我也理解,许多用户没有使用这个功能和/或对技术的糟糕透顶,最终把自己的界面搞砸了(例如,通过折叠元框……不同的用户元选项,但想法相同)。我们也知道,硬编码这种东西是一种不好的做法,但有时你真的只需要完成它:

add_filter(\'get_user_option_meta-box-order_post\', \'override_post_meta_box_order\');

function override_post_meta_box_order($order) {
    $order[\'normal\'] = "comma,separated,list,of,meta,boxes";
    $order[\'side\'] = "you,get,the,idea";

    return $order;
}
您可以通过浏览数据库或error_log(print_r($order,true)) 或者别的什么。

更好的方法是从另一个帐户(如管理员帐户)获取这些值,然后可以使用该帐户控制和修改元框顺序@s\\u ha\\u dum的答案正是为了这个,除了你在其中得到一个无限循环,因为每次调用get_user_option() 通过过滤器,然后调用get_user_option(), 等您需要有一个基本case,它检查请求的用户是否为1,然后实际返回用户选项。你不能简单地检查get_current_user_id() 尽管如此,即使您正在呼叫,也会返回当前查看页面的用户get_user_option(\'meta-box-order_post\', 1). 我确信有一种方法,但简单地看一下,我不知道如何避免这个无限循环。

实际上,一种解决方法是直接查询$wpdb 用于此值,而不是使用WordPress函数get_user_option().

EDIT: 修复错误后,@s\\u ha\\u dum的答案更好,因为它不会硬编码顺序,而是让指定用户控制它:https://wordpress.stackexchange.com/a/124337/41534

结束

相关推荐

在自定义metabox中将页面从html更改为文本后更新页面时的所有tincymce开关

我有一个使用wp\\u编辑器的自定义元框,当我切换到文本编辑器而不是视觉时,更新时,主要内容tinymce也会更改为文本视图。我想知道我是做错了什么,还是wordpress在创建自定义metabox和wp_编辑器时的正常行为?我用来设置所有这些的代码是:add_action(\'add_meta_boxes\', \'page_tagline_meta_box\'); function page_tagline_meta_box($post) { global $post;