कस्टम व्यवस्थापक पृष्ठों में स्क्रीन विकल्प जोड़ें


13

मैं अपने प्लगइन सेटिंग्स पेज में स्क्रीन विकल्प जोड़ना चाहता हूं, जो डैशबोर्ड में उपलब्ध हैं।

यहाँ छवि विवरण दर्ज करें

मैंने ऑब्जेक्ट की add_optionविधि का उपयोग करने की कोशिश की WP_Screenऔर पाया कि यह केवल दो विकल्पों का समर्थन करता है। per_pageऔर layout_columns

क्या किसी को पता है कि डैशबोर्ड पृष्ठ में एक जैसे विकल्प प्राप्त करने के लिए किस स्क्रीन विकल्प का उपयोग करना है?

संपादित करें :

मैं समझाता हूं कि मैं क्या करने की कोशिश कर रहा हूं।

मेरे बल्क डिलीट प्लगिन में मेरे अलग-अलग सेक्शन हैं और प्रत्येक सेक्शन को कुछ मानदंड (जैसे श्रेणी, टैग, कस्टम टैक्सोनॉमी आदि) के आधार पर लोग डिलीट करते हैं। मैं उपयोगकर्ताओं को यह चुनने देना चाहता हूं कि वे किस अनुभाग का उपयोग करना चाहते हैं और वे कौन से अनुभाग छिपाना चाहते हैं, जो डैशबोर्ड पृष्ठ के समान हैं, जहां उपयोगकर्ता यह चुन सकते हैं कि वे कौन से डैशबोर्ड विजेट को देखना चाहते हैं और किन लोगों को छिपाना है।

अब, इसे लागू करने के लिए, मैं चेकबॉक्स (प्रत्येक अनुभाग के लिए एक) की एक सूची दिखाना चाहता हूं और उपयोगकर्ता को यह चुनना चाहिए कि कौन सा दिखाना है।

चेकबॉक्स की सूची दिखाने के लिए, मुझे ऑब्जेक्ट की add_optionविधि को कॉल करना था WP_Screen। जब मैं ऐसा कर रहा था, तो मुझे लगा कि वर्तमान में add_optionकेवल इन दो प्रकारों का समर्थन करता है और दूसरों को केवल अनदेखा किया जाता है।

  • प्रति पृष्ठ
  • layout_columns

लेकिन, केवल डैशबोर्ड पृष्ठ में ही चेकबॉक्स दिखाए जाते हैं। मैं जानना चाहता हूं कि मेरे कस्टम व्यवस्थापक पृष्ठ के स्क्रीन विकल्प अनुभाग में भी इसी तरह की चीज़ को कैसे दोहराया जाए।


हां, स्क्रीन विकल्प टैब अभेद्य लगता है ... ऐसा करने के लिए सहायता टैब अपहरण के बारे में क्या?
ब्रासोफिलो

जवाबों:


6

आपको नई स्क्रीन विकल्प पंक्ति का आविष्कार करने की आवश्यकता नहीं है। बस उचित मेटाबॉक्स का उपयोग करें।

वर्तमान में, आप छद्म-मेटाबॉक्सेस आकर्षित कर रहे हैं:

<!-- 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()

सभी विवरणों के लिए स्टीफन हैरिस से कस्टम पृष्ठों पर मेटा बॉक्स पढ़ें ( GitHub पर डेमो )। मुख्य बिंदु यह है: आपको इन बॉक्सों के लिए स्क्रीन विकल्प मुफ्त में मिलेंगे।

और जब वर्डप्रेस एक दिन मेटाबॉक्स के लिए आंतरिक मार्कअप को बदल देता है, तो आपका कोड शायद काम करेगा, क्योंकि आपने एपीआई का उपयोग किया है।


कोड और लिंक के लिए धन्यवाद। अब इसे शामिल करने के लिए मेरे प्लगइन को संशोधित करना।
सुडार

4

आप इसे \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 );

1

स्टीफन हैरिस द्वारा कस्टम पेजों पर मेटा बॉक्सेस के आधार पर एक पूर्ण, संक्षिप्त उदाहरण दिया गया है :

एक जिस्ट के रूप में एक ही कोड

<?php

/**
 * Plugin Name:     LHF Volunteer Form
 * Description:     Manages a google-sheet full of names and emails
 * Plugin URI:      http://ladehammerfestivalen.no/volunteer
 * Author URI:      http://genja.org
 * Author:          jazzoslav@gmail.com
 * Text Domain:     lhf-volunteer-form
 * Domain Path:     /languages
 * Version:         0.2.0
 * @package         Lhf_Volunteer_Form
 */

require_once  __DIR__ . '/vendor/autoload.php';

use Lhf\Sheet\RegistrationsSheet;

frivilligSystemMain();

function frivilligSystemMain() {
    try {
        $regSheet = \Lhf\Sheet\RegistrationsSheet::createInWordPress();
    } catch (\Exception $ex) {
        error_log(sprintf('%s:%d %s', __FILE__, __LINE__, $ex->getMessage()));
    }
    add_action('init', function() use ($regSheet) {
        if (is_admin()) {
            add_action( 'admin_menu', function() use ($regSheet) {
                $screenId = DashboardView::screen_id;
                $pageId = add_dashboard_page( 'hammerater', 'Hammerater', 'endre_frivillig_skjema', $screenId,
                    function () use ($regSheet) { DashboardView::renderVolunteerDashboard($regSheet); } );
                add_action("load-$pageId", function() use ($regSheet, $pageId, $screenId) {
                    wp_enqueue_script('postbox');
                    add_screen_option('layout_columns', array('max' => 2, 'default' => 2) );
                    do_action("add_meta_boxes_$screenId", null); // allow third parties to hook into this.
                    do_action('add_meta_boxes', $screenId, null); // allow third parties to hook into this.
                });
                add_action("add_meta_boxes_$screenId", function () use ($regSheet) { DashboardView::registerMetaboxes($regSheet); });
            });
        }
    });
}

class DashboardView
{
    const screen_id = 'frivillig-liste';

    private static function includeAdminHeader()
    {
        require_once( ABSPATH . 'wp-admin/admin.php');
        require_once( ABSPATH . 'wp-admin/includes/dashboard.php');
        require_once( ABSPATH . 'wp-admin/admin-header.php');
        wp_dashboard_setup();
        wp_enqueue_script( 'dashboard' );
        add_thickbox();
        do_action( 'add_meta_boxes' );
        if ( wp_is_mobile() ) {
            wp_enqueue_script( 'jquery-touch-punch' );
            //wp_dequeue_script('jquery-migrate');
        }

        wp_enqueue_script( 'datatables', '//cdn.datatables.net/1.10.16/js/jquery.dataTables.js');
        wp_enqueue_style( 'datatables', '//cdn.datatables.net/1.10.16/css/jquery.dataTables.css');

        wp_enqueue_script( 'datatables-responsive', '//cdn.datatables.net/responsive/2.2.1/js/dataTables.responsive.min.js');
        wp_enqueue_style(  'datatables-responsive', '//cdn.datatables.net/responsive/2.2.1/css/responsive.dataTables.min.css');

        wp_enqueue_script( 'datatables-row-group', '//cdn.datatables.net/rowgroup/1.0.2/js/dataTables.rowGroup.min.js');
        wp_enqueue_style(  'datatables-row-group', '//cdn.datatables.net/rowgroup/1.0.2/css/rowGroup.dataTables.min.css');
    }

    static function renderVolunteerDashboard(RegistrationsSheet $regSheet) {
        static::includeAdminHeader();
        wp_enqueue_script('lhf-sheets');
        $workTypes = get_option( 'lhfsheets_form_work_types' );
        ?>
        <div class="wrap">
            <form>
<?php
        wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
        wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
?>
            <h1>Frivillige Hammerater</h1>
            <h2 class="nav-tab-wrapper">
                <a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=liste' ) ?>" >Liste</a>
                <a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=preferanser' ) ?>">Arbeidsposter</a>
                <a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=info' ) ?>">Frivilliginfo</a>
            </h2>
            <?php
            $screen      = get_current_screen();
            $columns     = absint( $screen->get_columns() );
            $columns_css = '';
            if ( $columns ) {
                $columns_css = " columns-$columns";
            }
            ?>

            <?php if ( $_GET['tab'] == 'liste' || ! $_GET['tab'] ) { ?>
                <div id="dashboard-widgets" class="metabox-holder<?php echo $columns_css; ?>">
                    <div id="postbox-container-1" class="postbox-container">
                        <?php do_meta_boxes( $screen->id, 'main_list', '' ); ?>
                    </div>
                </div>
            <?php } ?>

            <?php if ( $_GET['tab'] == 'preferanser' || ! $_GET['tab'] ) { ?>
                <div id="dashboard-widgets" class="metabox-holder<?php echo $columns_css; ?>">
                    <div id="preferences-sortables" class="postbox-container">
                        <?php do_meta_boxes( $screen->id, 'preferences', ''); ?>
                    </div>
                    <div id="preferences_left-sortables" class="postbox-container">
                        <?php do_meta_boxes( $screen->id, 'preferences_right', ''); ?>
                    </div>
                </div>
            <?php } ?>
            <?php if ( $_GET['tab'] == 'info' ) { ?>
                        <h3>Annen info</h3>
            <?php } ?>
            </form>
        </div>
        <?php
    }

    static function renderMainList($records, $status = 'registered/served/contacted') {
        /** @var Frivillig $e */
        ?>
        <div class="main">
          <table id="frivillige-hammerater-<?= $status ?>" style="display:none" data-status="<?= $status ?>">
            <?php foreach ($records as $e) { ?>
              <tr> ...  </tr>
            <?php } ?>
            </tbody>
          </table>
        </div>
        <?php
    }

    public static function registerMetaboxes( RegistrationsSheet $regSheet ) {
        if ($_GET['tab'] == 'info') { return; }
        $all = $regSheet->getVolunteerRecords();
        if ($_GET['tab'] == 'liste' || $_GET['tab'] === null) {
            foreach (Frivillig::states() as $state) {
                add_meta_box(
                    "volunteers-search-all",
                    __('Verktøy') ,
                    function () use ($state) { DashboardView::renderGlobalSearchMetaBox(); },
                    'dashboard_page_frivillig-liste',
                    'main_list'
                );

                $peopleWithState = [];
                foreach ($all as $f) { if ($f->status === $state) { $peopleWithState[] = $f; } }

                add_meta_box(
                    "volunteers-$state",
                    DashboardView::$stateName[$state],
                    function () use ($peopleWithState, $state) { DashboardView::renderMainList($peopleWithState, $state); },
                    'dashboard_page_frivillig-liste',
                    'main_list'
                );
            }
        }

        if ($_GET['tab'] == 'preferanser') {
            $workTypes = get_option('lhfsheets_form_work_types');
            foreach ($workTypes as $workType) {
                $workers = [];
                foreach ($all as $frivillig) {
                    $interests = preg_split('/,\s+/', $frivillig->interests);
                    if (in_array($workType['slug'], $interests)) {
                        $workers[] = $frivillig;
                    }
                }
                add_meta_box(
                    "volunteer-prefers-{$workType['slug']}",
                    $workType['description'],
                    function () use ($workers, $workType) { DashboardView::renderPreferences($workers, $workType); },
                    'dashboard_page_frivillig-liste',
                    'preferences'
                );
            }
        }
    }

    public static function renderPreferences($workers, $workType) { ?>
        <ul>
            <?php foreach ($workers as $e) { ?>
            <li data-id="<?= $e->id ?>"> ...  </li>
            <?php } ?>
        </ul>
        <?php
    }

    private static function renderGlobalSearchMetaBox() {
        ?> Søk: <input type="text" onkeydown="window.populateSearchFields(event)" placeholder="<?= __('i alle tabellene') ?>  "> <?php
    }
}

संदर्भ

https://codex.wordpress.org/Dashboard_Widgets_API

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.