默认情况下使自定义元变量折叠

时间:2010-11-21 作者:matt

我已经为我的写后屏幕创建了一些自定义元数据库。是否有任何方法可以使其中一些在默认情况下显示为折叠?

如果我没有使用正确的术语或我的问题不清楚,我将详细说明:

写后屏幕上的元框在框的右上角有一个切换开关。如果将鼠标悬停在该区域上,它会显示一个小向下箭头和“单击切换”字样。单击它时,元框将折叠,隐藏内容并仅显示元框的标题栏。我不是说让整个元数据库消失的屏幕选项(只在给定的帐户上)。我只想在默认情况下,为所有WP用户以折叠模式显示某些元框。

UPDATE:

在阅读了Hakre的回答,切换状态是为用户存储的之后,我想澄清一下我希望它如何工作。我不确定这是否可行,但我希望当帖子是新的时,元盒默认为折叠,然后当用户展开它们时,它们应该展开。但是,我希望这些设置保持在特定帖子的本地位置,因此当它们创建新帖子时,所有元数据库都会折叠。

3 个回复
最合适的回答,由SO网友:hakre 整理而成

要显示默认情况下折叠或关闭的元盒,最好知道添加closed 属性将显示它已关闭。所有具有closed 在类名称中,以封闭形式显示。

单击箭头时,它将被删除或添加(切换)。这是在post editor页面上以交互方式完成的。手动添加closed 只有在浏览器中使用firebug或类似的开发工具才能使用classname。

由于Wordpress通常会跟踪每个元数据库的切换状态,因此您应该注意仅在特定用户第一次访问编辑器或添加到用户时才将切换状态初始设置为关闭。

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

update_user_option($user->ID, "closedpostboxes_$page", $closed, true);
$closed 是以逗号分隔的所有已关闭的元数据库ID的列表。$page 设置为;“发布”;为博文编辑(你要求的那位)。因此,当创建新用户(或为所有现有用户安装插件)时,您可以使用metabox的ID扩展该设置。这应该可以完成工作。

你唯一需要知道的是你的代谢箱的ID,但我敢肯定你已经知道了。如果没有,请检查注册元数据库的代码。

此外,在关闭的复选框旁边,还可以设置隐藏的复选框,这些复选框对应于复选框。这是hiddenpostboxes_$page 然后选择。

更新一些关于如何添加选项的代码:

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请求),它应该显示该框已关闭。

SO网友:sorich87

另一种方法是在get\\u user\\u选项中使用挂钩:

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\' );

SO网友:t31os

您可以钩住用户注册钩子并应用邮箱状态更改,然后,只要创建新用户,它就会运行。

add_action( \'user_register\', \'set_user_closedboxes\' );
function set_user_closedboxes( $uid ) {
    update_user_meta( $uid, \'closedpostboxes_{type}\',array(\'submitdiv\',\'postcustom\'));
}
在哪里{type} 应该是您适用的post类型,数组应该包含要隐藏的框的ID(submitdiv和postcustom是两个示例)。

如果希望更新现有用户,则需要编写查询,但以上内容应涵盖新创建/注册的用户。。

代码未经测试,但我认为它没有理由不工作,如果有任何问题,请报告。

希望这有帮助。。

结束

相关推荐

使用自定义类别Metabox在管理中未保存的页面类别?

我对此不知所措。您是否看到以下特定于noindex、nofollow复选框的代码有任何错误?元框可以很好地绘制到屏幕上,但值不会粘住。自定义页面标题和自定义摘录的代码工作正常。// =================== // = POST OPTION BOX = // =================== add_action(\'admin_menu\', \'my_post_options_box\'); function my_post_op