問題描述
我想添加屏幕選項到我的插件設置頁面,如在儀錶板中可用的。
我嘗試使用 WP_Screen 對象的 add_option 方法,發現它只支持兩個選項。 per_page 和 layout_columns 。
有沒有人知道使用什麼屏幕選項來獲取 「儀錶板」 頁面中的選項?
編輯:
讓我解釋一下我想要的一點。
我在 Bulk Delete Plugin 中有不同的部分,每個部分讓我們根據一些標準 (如類別,標籤,自定義分類法等) 刪除帖子。我想讓用户選擇他們想要使用的部分以及他們想要隱藏的部分,類似於 「信息中心」 頁面,用户可以在其中選擇要查看哪些信息中心小工具以及哪些要隱藏的信息中心。
現在要實現這一點,我想顯示一個複選框列表 (每個部分一個),讓用户選擇要顯示哪一個。
要顯示覆選框列表,我必須調用 WP_Screen 對象的 add_option 方法。當我這樣做時,我發現目前的 add_option 功能只支持這兩種類型,其他的只是被忽略。
-
per_page
-
layout_columns
但是,僅在儀錶板頁面複選框中顯示。我想知道如何在我的自定義管理頁面的屏幕選項部分複製類似的東西。
最佳解決方案
您不需要發明一個新的屏幕選項行。只要使用適當的 metaboxes 。
目前您正在繪製 pseudo-metaboxes:
<!-- Post status start-->
<div class = "postbox">
<div class = "handlediv"> <br> </div>
<h3 class = "hndle"><span><?php _e("By Post Status", 'bulk-delete'); ?></span></h3>
<div class = "inside">
<h4><?php _e("Select the posts which you want to delete", 'bulk-delete'); ?></h4>
你應該做這個:
<div id="post-body-content">
<!-- #post-body-content -->
</div>
<div id="postbox-container-1" class="postbox-container">
<?php do_meta_boxes('','side',$object); ?>
</div>
<div id="postbox-container-2" class="postbox-container">
<?php do_meta_boxes('','normal',$object); ?>
<?php do_meta_boxes('','advanced',$object); ?>
</div>
然後用 add_meta_box()註冊自己的 metaboxes 。
從 Stephen Harris 閲讀 Meta Boxes on Custom Pages 的所有細節 (demo on GitHub) 。要點是:您可以免費獲得這些盒子的屏幕選項。
當 WordPress 有一天更改 metaboxes 的內部標記時,您的代碼可能仍然可以工作,因為您已經使用了 API 。
次佳解決方案
您可以通過在 WP_Screen 類中使用適當的過濾器來實現。只需確保您不會默認切換它:
如何顯示或隱藏選項卡
以下過濾器顯示如何顯示或隱藏選項卡。實際上,由於有一個更好的過濾器,如果您需要強制隱藏該選項卡已存在,則以下方式將更為有用:
add_filter( 'screen_options_show_screen', function( $show, WP_Screen $screen )
{
// Navigate to the screen of choice and uncomment the following line to find out the 'base' val
// var_dump( $screen );
return 'your_screen_id' !== $screen->base
? $show
: true;
}, 10, 2 );
如何顯示標籤並添加自定義內容
以下顯示一個設置選項卡,其中包含一個輸入字段,該字段包含您可以以任何方式在您的頁面上使用的值 amount(例如限制 $wpdb 查詢的結果) 。
/**
* @param string $settings
* @param WP_Screen $screen
*/
add_filter( 'screen_settings', function( $settings, WP_Screen $screen )
{
if ( 'your_screen_id' !== $screen->base )
return $settings;
$amount = isset( $_GET['paged'] )
? filter_var(
absint( $_GET['paged'] ),
FILTER_SANITIZE_NUMBER_INT,
FILTER_NULL_ON_FAILURE
)
: 1;
return sprintf(
'<label for="amount">Amount:</label> '
.'<input step="1" min="1" max="999" class="screen-per-page" name="amount" val="%d">',
.get_submit_button( 'Set', 'secondary', 'submit-amount', false ),
$amount
);
}, 10, 2 );
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
