Добавить мета-бокс на страницу настроек WordPress - PullRequest
2 голосов
/ 25 декабря 2011

Как я могу добавить (перетаскиваемый) мета-блок на страницу параметров для плагина, который я создал?Это вообще возможно?Потому что, если я загляну в документы, то увижу, что могу добавить его только в «пост», «страницу», «ссылку» или «custom_post_type».

1 Ответ

4 голосов
/ 25 декабря 2011

Да, это возможно.Код в вашем предыдущем вопросе был верным, но в нем пропущено что-то важное, или вы не добавили этот код в вопрос.

Вот демонстрационный плагин , который поможет вам заставить его работать.

Этот плагин демонстрирует, как вы можете создавать свои собственные страницы плагинов с помощью перетаскиваемых метабоксов WordPress, требует версию WordPress 2.7, поддерживает WordPress 2.8 измененный механизм размещения бокса

БазовыйКод из демо-плагина следующий.Обратите внимание, что в полном примере не работают ни боковые мета-блоки, ни расположение двух столбцов, как это было написано для WordPress 2.8, а текущая версия - почти 5.0.

// Source code by Frank Bueltge at gist.github.com/bueltge/757903
class howto_metabox_plugin {
    function howto_metabox_plugin() {
        add_action('admin_menu', array($this, 'on_admin_menu')); 
        add_action('admin_post_save_howto_metaboxes_general', array($this, 'on_save_changes'));
    }

    function on_admin_menu() {
        $this->pagehook = add_options_page('Howto Metabox Page Title', "HowTo Metaboxes", 'manage_options', 'howto_metaboxes', array($this, 'on_show_page'));
        add_action('load-'.$this->pagehook, array($this, 'on_load_page'));
    }

    function on_load_page() {
        wp_enqueue_script('common');
        wp_enqueue_script('wp-lists');
        wp_enqueue_script('postbox');
        add_meta_box('howto-metaboxes-contentbox-2', 'Contentbox 2 Title', array($this, 'on_contentbox_2_content'), $this->pagehook, 'normal', 'core');
        add_meta_box('howto-metaboxes-contentbox-additional-1', 'Contentbox Additional 1 Title', array($this, 'on_contentbox_additional_1_content'), $this->pagehook, 'additional', 'core');
    }

    function on_show_page() {
        //define some data can be given to each metabox during rendering
        $data = array('My Data 1', 'My Data 2', 'Available Data 1');
        ?>
        <div id="howto-metaboxes-general" class="wrap">
        <?php screen_icon('options-general'); ?>
        <h2>Metabox Showcase Plugin Page</h2>
        <form action="admin-post.php" method="post">
            <?php wp_nonce_field('howto-metaboxes-general'); ?>
            <input type="hidden" name="action" value="save_howto_metaboxes_general" />

            <div id="poststuff" class="metabox-holder">
                <div id="side-info-column" class="inner-sidebar">
                    <?php do_meta_boxes($this->pagehook, 'side', $data); ?>
                </div>
                <div id="post-body" class="has-sidebar">
                    <div id="post-body-content" class="has-sidebar-content">
                        <?php do_meta_boxes($this->pagehook, 'normal', $data); ?>
                        <?php do_meta_boxes($this->pagehook, 'additional', $data); ?>
                        <p>
                            <input type="submit" value="Save Changes" class="button-primary" name="Submit"/>    
                        </p>
                    </div>
                </div>
                <br class="clear"/>

            </div>  
        </form>
        </div>
        <script type="text/javascript">
            //<![CDATA[
            jQuery(document).ready( function($) {
                // close postboxes that should be closed
                $('.if-js-closed').removeClass('if-js-closed').addClass('closed');
                // postboxes setup
                postboxes.add_postbox_toggles('<?php echo $this->pagehook; ?>');
            });
            //]]>
        </script>

        <?php
    }

    function on_save_changes() {
        if ( !current_user_can('manage_options') )
            wp_die( __('Cheatin&#8217; uh?') );         

        check_admin_referer('howto-metaboxes-general');     
        //process here your on $_POST validation and / or option saving 
        //lets redirect the post request into get request (you may add additional params at the url, if you need to show save results
        wp_redirect($_POST['_wp_http_referer']);        
    }
    function on_contentbox_2_content($data) {
        sort($data);
        ?>
        <p>The given parameter at <b>reverse sorted</b> order are: <em><?php echo implode(' | ', array_reverse($data)); ?></em></p>
        <?php
    }
    function on_contentbox_additional_1_content($data) {
        ?>
        <p>This and the 2nd <em>additional</em> box will be addressed by an other group identifier to render it by calling with this dedicated name.</p>
        <p>You can have as much as needed box groups.</p>
        <?php
    }
}
$my_howto_metabox_plugin = new howto_metabox_plugin();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...