问题描述

我为我的帖子写屏幕创建了一些自定义的 metaboxes 。有什么办法使其中的一些默认显示折叠?

为了防止在我的问题中使用正确的术语或不清楚,我将详细说明:

邮政编写屏幕上的 metaboxes 在框的右上角有一个拨动开关。如果您将鼠标悬停在该区域上,则会显示一点向下箭头和单击 “切换” 。当你点击它,metabox 崩溃,隐藏的内容,只显示 metabox 的标题栏。我不是在谈论屏幕选项,使得整个 metaboxes 消失 (仅在给定的帐户) 。我只是希望所有 WP 用户默认情况下,某些元 gems 在折叠模式下显示。

更新:

在 Hakre 的回答中看到,为用户存储了切换状态,我想添加一些关于我希望它如何工作的澄清。我不知道这是否可行,但我希望 metaboxes 默认折叠,当帖子是新的,然后当用户扩展他们应该展开。但是,我希望这些设置保持在特定帖子的地方,所以当他们创建一个新的帖子时,所有的 metaboxes 都被折叠了。

最佳解决方案

要显示默认情况下折叠或关闭的 metabox,很高兴知道将 closed 添加到其属性将显示为关闭。所有在其类名中具有 closed 的主体的所有 meta-boxes 主 div 都以封闭的形式显示。

当箭头被点击时,它将被删除或添加 (切换) 。这是在 post editor 页面上交互地完成的。手动添加 closed 类名只能在您的浏览器中使用像 firebug 或类似的开发工具这样做。

由于 WordPress 通常会跟踪每个 metabox 的切换状态的状态,所以您应该注意只有在初次设置切换状态才能在特定用户第一次访问编辑器或添加到用户时关闭。

这些元宝宝关闭的数据存储在用户选项中,每次切换一个框时,将存在一个存储它的 ajax 请求:

update_user_option($user->ID, "closedpostboxes_$page", $closed, true);

$closed 是关闭的所有 metaboxes ID 的 comma-seperated 列表。 $page 设置为”post” 用于帖子编辑器 (您要求的) 。因此,当创建新用户 (或为所有现有用户安装插件) 时,可以使用您的 metabox 的 ID 扩展该设置。这应该做这个工作。

你唯一需要知道的是你的 metabox 的 ID,但我很确定你知道一个已经。如果没有,请检查您在代码中注册的代码。

此外,在关闭的旁边,您还可以设置隐藏 btw 的那些,这对应于复选框。那就是 hiddenpostboxes_$page 选项。

Update

一些代码剪辑如何添加选项:

function collapseBoxForUser($userId, $page, $boxId) {
    $optionName = "closedpostboxes_$page";
    $close = get_user_option($optionName, $userId);
    $closeIds = explode(',', $close);
    $closeIds[] = $boxId;
    $closeIds = array_unique($clodeIds); // remove duplicate Ids
    $close = implode(',', $closeIds);
    update_user_option($userId, $optionName, $close);
}

只需使用正确的值调用该函数,它将把 boxId 插入到值中。下一次编辑器正在加载屏幕的值 (例如通过 ajax 请求) 时,应该显示该框已关闭。

次佳解决方案

另一种方法是使用 get_user_option 中的钩子:

function closed_meta_boxes( $closed ) {
    if ( false === $closed )
        $closed = array( 'submitdiv', 'postcustom', 'anothermetaboxid' );

    return $closed;
}
add_filter( 'get_user_option_closedpostboxes_{post_type_slug}', 'closed_meta_boxes' );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。