কাস্টম প্রশাসক পৃষ্ঠাগুলিতে স্ক্রীন বিকল্প যুক্ত করুন


13

আমি ড্যাশবোর্ডে উপলভ্য যেমনগুলির মতো আমার প্লাগইন সেটিংস পৃষ্ঠায় স্ক্রিন বিকল্পগুলি যুক্ত করতে চাই।

এখানে চিত্র বর্ণনা লিখুন

আমি অবজেক্টের add_optionপদ্ধতিটি ব্যবহার করে চেষ্টা করে WP_Screenদেখেছি এটি কেবল দুটি বিকল্পকে সমর্থন করে। per_pageএবং layout_columns

ড্যাশবোর্ডের পৃষ্ঠার মতো বিকল্পগুলি পেতে কী পর্দা বিকল্প ব্যবহার করতে হবে তা কি কেউ জানেন?

সম্পাদনা করুন :

আমি কি একটু চেষ্টা করছি তা ব্যাখ্যা করুন।

আমার বাল্ক মুছুন প্লাগিনে আমার বিভিন্ন বিভাগ রয়েছে এবং প্রতিটি বিভাগে লোকেরা কিছু মানদণ্ডের (যেমন বিভাগ, ট্যাগ, কাস্টম ট্যাক্সোনমি ইত্যাদি) উপর ভিত্তি করে পোস্টগুলি মুছতে দেয়। আমি ব্যবহারকারীদের কোন বিভাগটি তারা ব্যবহার করতে চান এবং কোন বিভাগটি তারা লুকাতে চান তা বেছে নিতে দিতে চাই, ড্যাশবোর্ড পৃষ্ঠার অনুরূপ, যেখানে ব্যবহারকারীরা বেছে নিতে পারেন কোন ড্যাশবোর্ড উইজেটগুলি তারা দেখতে চান এবং কোনটি লুকিয়ে রাখতে হবে।

এখন এটি বাস্তবায়নের জন্য, আমি চেকবক্সগুলির একটি তালিকা (প্রতিটি বিভাগের জন্য একটি) প্রদর্শন করতে চাই এবং ব্যবহারকারীকে কোনটি প্রদর্শিত হবে তা চয়ন করতে দিন।

চেকবক্সগুলির তালিকা প্রদর্শন করতে, আমাকে অবজেক্টের add_optionপদ্ধতিটি কল করতে হয়েছিল WP_Screen। যখন আমি এটি করছি, আমি বুঝতে পেরেছিলাম যে বর্তমানে add_optionফাংশনটি কেবল এই দুটি ধরণের সমর্থন করে এবং অন্যরা কেবল অবহেলিত।

  • প্রতি পৃষ্ঠা
  • layout_columns

তবে, কেবল ড্যাশবোর্ড পৃষ্ঠাতে চেকবক্সগুলি প্রদর্শিত হয়। আমি জানতে চাই কীভাবে আমার কাস্টম অ্যাডমিন পৃষ্ঠার স্ক্রিন অপশন বিভাগে একই জাতীয় জিনিসটির অনুলিপি করা যায়।


হ্যাঁ, স্ক্রিন বিকল্প ট্যাব দুর্ভেদ্য বলে মনে হচ্ছে ... এটি করতে সহায়তা ট্যাব হাইজ্যাক করা সম্পর্কে কী?
brasofilo

উত্তর:


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

সমস্ত বিবরণের জন্য স্টিফেন হ্যারিসের কাছ থেকে কাস্টম পৃষ্ঠাগুলিতে মেটা বক্সগুলি পড়ুন ( গিটহাবের ডেমো )। মূল কথাটি হ'ল: আপনি এই বাক্সগুলির জন্য পর্দার বিকল্পগুলি বিনামূল্যে পাবেন।

এবং যখন ওয়ার্ডপ্রেস একদিন মেটাবক্সের জন্য অভ্যন্তরীণ মার্কআপ পরিবর্তন করে, আপনার কোড সম্ভবত এখনও কাজ করবে, কারণ আপনি API ব্যবহার করেছেন।


কোড এবং লিঙ্কের জন্য ধন্যবাদ। এটি এখন অন্তর্ভুক্ত করার জন্য আমার প্লাগিনটি পরিবর্তন করছে।
সুদার

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.