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