問題描述

我為我的帖子寫屏幕創建了一些自定義的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。