重复设置插件,独立且按选项卡分隔

时间:2019-10-08 作者:pije76

我已经创建了具有这些设置的插件,然后我想用相同的表单复制其他选项卡的设置,但输入/输出过程将彼此独立。

以下是迄今为止的代码:

    function __construct( $prefix )
    {
        $this->setttings_prefix = $prefix;

        if(  wp_verify_nonce($_POST[\'save_settings_field\'], \'save_settings_action\') )
        {
            $options = array();
            foreach( $_POST as $key=>$value )
            {
                $options[$key] = $value;
            }
            update_option( $this->setttings_prefix.\'_options\', $options );

            $this->message = \'<div class="alert alert-success">Settings saved</div>\';
        }

    }


    function show_settings()
            {
                $current_page = isset($_GET[\'page\']) ? $_GET[\'page\'] : \'\';
                $active_tab = isset( $_GET[ \'tab\' ] ) ? $_GET[ \'tab\' ] : \'settings1\';
                ?>

                <div class="wrap tw-bs4">

                    <h2 class="nav-tab-wrapper">
                        <a href="?page=wsr_settings&tab=settings1" class="nav-tab  <?php echo $active_tab == "settings1" ? "nav-tab-active" : ""; ?>"><?php _e(\'Settings1\', \'sc\'); ?></a>
                        <a href="?page=wsr_settings&tab=settings2" class="nav-tab  <?php echo $active_tab == "settings2" ? "nav-tab-active" : ""; ?>"><?php _e(\'Settings2\', \'sc\'); ?></a>
                    </h2>

                    <hr/>

                    <?php
                    if( $active_tab == \'settings1\' )
                    {
                    ?>
                        <form class="form-horizontal" method="post" action="">
                            <?php
                                wp_nonce_field( \'save_settings_action\', \'save_settings_field\'  );
                                $config = get_option( $this->setttings_prefix.\'_options1\');
                            ?>

                            <fieldset>
                                <?php
                                    foreach( $this->setttings_parameters as $single_page )
                                    {
                                        $hidden_class = \'hidden\';
                                        if($single_page[\'menu_slug\'] == $current_page)
                                        {
                                            $hidden_class = \'\';
                                        }
                                        foreach( $single_page[\'parameters\'] as $key=>$value )
                                        {
                                            switch( $value[\'type\'] )
                                            {
                                                case "separator":
                                                $out .= \'
                                                <div class="lead">\'.$value[\'title\'].\'</div> 
                                                \';
                                                break;
                                                case "text":
                                                $out .= \'
                                                <div class="form-group \'.$hidden_class.\'">
                                                <label class="control-label" for="\'.$value[\'id\'].\'">\'.$value[\'title\'].\'</label>
                                                <input type="text"  class="form-control \'.$value[\'class\'].\'"  name="\'.$value[\'name\'].\'" id="\'.$value[\'id\'].\'" placeholder="\'.$value[\'placeholder\'].\'" value="\'.esc_html( stripslashes( $config[$value[\'name\']] ) ).\'">
                                                <p class="help-block">\'.$value[\'sub_text\'].\'</p>
                                                </div>
                                                \';
                                                break;
                                                case "hidden":
                                                $out .= \'<input type="hidden"  name="\'.$value[\'name\'].\'" value="\'.esc_html( stripslashes( $config[$value[\'name\']] ) ).\'">\';
                                                break;
                                                case "button":
                                                $out .= \'
                                                <div class="form-group \'.$hidden_class.\'">
                                                <label class="control-label" for="">&nbsp;</label>
                                                <a class="btn btn-success" href="\'.$value[\'href\'].\'"   >\'.$value[\'title\'].\'</a>
                                                </div>
                                                \';
                                                break;
                                                $out .= \'
                                            </fieldset>
                                            </div>
                                            \';
                                            break;
                                            }
                                        }
                                    }
                                    echo $out;
                                ?>

                                <div class="form-actions">  
                                    <button type="submit"   class="btn btn-primary">Save Settings</button>  
                                </div>  

                            </fieldset>  
                        </form>
                        <?php
                        echo $this->message;
                    ?>

                </div>
                <?php
                }
                elseif( $active_tab == \'settings2\' )
                {
                    .......Same as above......
                }
            }
        }
代码成功地显示了多个选项卡和表单,但仍然为每个设置选项卡显示相同的设置和I/O。请帮帮我。提前感谢。

1 个回复
SO网友:Drmzindec

基本上,您可以为每个“选项卡”添加一个标识符,然后将其保存在多维数组中,这是一个输入可以做到的巧妙技巧,对于使用选项卡的WordPress插件非常有用。

<form id="form_1">
 <div class="tab_1">
  <input type="text" name="tab1[\'fieldname_0\']" value="tab_1_0">
  <input type="text" name="tab1[\'fieldname_1\']" value="tab_1_1">
  <input type="text" name="tab1[\'fieldname_2\']" value="tab_1_2">
  <input type="text" name="tab1[\'fieldname_3\']" value="tab_1_3">
 </div>

 <div class="tab_2">
  <input type="text" name="tab2[\'fieldname_0\']" value="tab_2_0">
  <input type="text" name="tab2[\'fieldname_1\']" value="tab_2_1">
  <input type="text" name="tab2[\'fieldname_2\']" value="tab_2_2">
  <input type="text" name="tab2[\'fieldname_3\']" value="tab_2_3">
 </div>
</form>
您的PHP不需要更改,但在调用时返回数据get_option() 将更改为一个数组,该数组很容易从那里迭代或通过$key引用。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。