問題描述

我想新增螢幕選項到我的外掛設定頁面,如在儀錶板中可用的。

我嘗試使用 WP_Screen 物件的 add_option 方法,發現它只支援兩個選項。 per_pagelayout_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。