2016-04-19 7 views
2

初めてのプラグインはほぼ完了しましたが、残念ながらregister_activation_hookで作成した配列に更新値を送信できません。Wordpress - 管理オプションページのフォーム送信時に値を配列に保存

私は、Wordpressがすべての汚い作業をどのように処理できるかについて、いくつかの洞察を必要としていますか?それとも、$ _POSTを使用する方が良いでしょうか?

以下は、すべての管理関連のものを扱う私のadmin.phpです。

<?php 

// Meaning of abbreviations: 
// clsc = Custom login shortcode 

// Runs when plugin is activated 
register_activation_hook(PLUGIN_MAIN_FILE, 'clsc_install'); 
// Create new database fields 
function clsc_install() { 
    $clsc_options = array(

     'Login_link'  => '/log-in/', 
     'Login_string'  => __('Log in', 'clsc'), 
     'Login_class'  => '', // Default is empty to inherit theme styles 
     'Logout_link'  => wp_logout_url(home_url()), 
     'Logout_string'  => __('Log out', 'clsc'), 
     'Logout_class'  => '', // Default is empty to inherit theme styles 
     'Account_link'  => '/my-account/', 
     'Account_string' => __('My Account', 'clsc'), 
     'Account_class'  => '' // Default is empty to inherit theme styles 

    ); 
    add_option('clsc_options_array', $clsc_options, '', 'yes'); 
} 


// Create admin option page 
function add_clsc_option_page() { 
    add_options_page(
     'Custom Login',    // The text to be displayed in the title tag 
     'Custom Login',    // The text to be used for the menu 
     'administrator',   // The capability required to display this menu 
     'custom-login-shortcodes', // The unique slug name to refer to this menu 
     'clsc_html_page');   // The function to output the page content 
} 
/* Call the html code */ 
add_action('admin_menu', 'add_clsc_option_page'); 

// Enqueue admin styles and scripts 
function clsc_enqueue_scripts() { 
    global $wpdb; 
    $screen = get_current_screen(); 

    if ($screen->id != 'settings_page_custom-login-shortcodes') { 
     return; // exit if incorrect screen id 
    } 

     wp_enqueue_style('brokenfruit-shortcodes-styles', plugins_url('admin/css/admin_styles.css', dirname(__FILE__))); 
     wp_enqueue_style('bootstrap', plugins_url('admin/css/bootstrap.css', dirname(__FILE__))); 
     wp_enqueue_script('admin_js_bootstrap_hack', plugins_url('admin/scripts/bootstrap-hack.js', dirname(__FILE__))); 

} 
add_action('admin_enqueue_scripts', 'clsc_enqueue_scripts'); 

// Build admin interface 
function clsc_html_page(){ 

    $options = get_option('clsc_options_array'); 

    ?> 
    <form method="post" action="options.php"> 
    <?php wp_nonce_field('update-options'); ?> 
     <div class="bootstrap-wrapper"> 
      <div class="row"> 
       <div class="col-md-12"> 
        <h1><?php _e('Custom Login Shortcode','clsc'); ?></h1> 
        <p><?php _e('To use for shortcode:','clsc'); ?><br/><span class="shortcode-preview">[custom_login]</span></p> 
       </div> 
      </div> 
      <div class="row" id="login-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in link:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: /log-in/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in string:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: Log in', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in class:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: login_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_class']; ?>" /> 
       </div> 
      </div> 
      <div class="row top-buffer" id="logout-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out link:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: /log-out/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out string:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: Log out', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out class:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: logout_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_class']; ?>" /> 
       </div> 
      </div> 
      <div class="row top-buffer" id="account-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Account link:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: /my-account/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Account string:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: My Account', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Account class:','clsc'); ?></h5> 
        <input placeholder="<?php _e('Example: account_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_class']; ?>" /> 
       </div> 
      </div> 
      <div class="row top-buffer"> 
       <div class="col-md-12"> 
        <input type="hidden" name="action" value="update" /> 
        <input type="hidden" name="page_options" value="clsc_options_array" /> 
        <input class="btn btn-primary top-buffer" type="submit" value="<?php _e('Save Changes') ?>" /> 
       </div> 
      </div> 
     </div> 
    </form> 
    <?php 
} 
?> 

代替アプローチのフィードバックは歓迎されています。

事前にお越しいただきありがとうございます。 :)

答えて

2

私は更新機能clsc_html_page()を持っており、設定フィールドの登録を保存するには'admin_init'というアクションを追加しました。

/** 
Plugin Name: clsc 
Plugin URI: http://google.com/ 
Description: this is description 
Version: 1.0 
Author: authourname 
Author URI: http://authoururri.com/ 
License: GPLv2 or later 
Text Domain: text domain 
*/ 

// Runs when plugin is activated 
register_activation_hook(PLUGIN_MAIN_FILE, 'clsc_install'); 
// Create new database fields 
function clsc_install() { 
    $clsc_options = array(

     'Login_link'  => '/log-in/', 
     'Login_string'  => __('Log in', 'clsc'), 
     'Login_class'  => '', // Default is empty to inherit theme styles 
     'Logout_link'  => wp_logout_url(home_url()), 
     'Logout_string'  => __('Log out', 'clsc'), 
     'Logout_class'  => '', // Default is empty to inherit theme styles 
     'Account_link'  => '/my-account/', 
     'Account_string' => __('My Account', 'clsc'), 
     'Account_class'  => '' // Default is empty to inherit theme styles 

    ); 
    add_option('clsc_options_array', $clsc_options, '', 'yes'); 
} 

add_action('admin_init','admin_init_register_setting'); 
function admin_init_register_setting() 
{  
    // register your plugins settings  
    /*register_setting('wp_plugin_template-group', 'Account_class'); 
    register_setting('wp_plugin_template-group', 'Account_string'); 
    register_setting('wp_plugin_template-group', 'Account_link'); 
    register_setting('wp_plugin_template-group', 'Logout_class'); 
    register_setting('wp_plugin_template-group', 'Logout_string'); 
    register_setting('wp_plugin_template-group', 'Logout_link'); 
    register_setting('wp_plugin_template-group', 'Login_class'); 
    register_setting('wp_plugin_template-group', 'Login_string'); 
    register_setting('wp_plugin_template-group', 'Login_link'); */ 
    register_setting('wp_plugin_template-group', 'clsc_options_array'); 

} 

// Create admin option page 
function add_clsc_option_page() { 
    add_options_page(
     'Custom Login',    // The text to be displayed in the title tag 
     'Custom Login',    // The text to be used for the menu 
     'administrator',   // The capability required to display this menu 
     'custom-login-shortcodes', // The unique slug name to refer to this menu 
     'clsc_html_page');   // The function to output the page content 
} 
/* Call the html code */ 
add_action('admin_menu', 'add_clsc_option_page'); 

// Enqueue admin styles and scripts 
function clsc_enqueue_scripts() { 
    global $wpdb; 
    $screen = get_current_screen(); 

    if ($screen->id != 'settings_page_custom-login-shortcodes') { 
     return; // exit if incorrect screen id 
    } 

     wp_enqueue_style('brokenfruit-shortcodes-styles', plugins_url('admin/css/admin_styles.css', dirname(__FILE__))); 
     wp_enqueue_style('bootstrap', plugins_url('admin/css/bootstrap.css', dirname(__FILE__))); 
     wp_enqueue_script('admin_js_bootstrap_hack', plugins_url('admin/scripts/bootstrap-hack.js', dirname(__FILE__))); 

} 
add_action('admin_enqueue_scripts', 'clsc_enqueue_scripts'); 

function clsc_html_page() 
{ 
    if(!current_user_can('manage_options')) 
    { 
     wp_die(__('You do not have sufficient permissions to access this page.')); 
    } 
    ?> 
    <div class="wrap">   
     <form method="post" action="options.php"> 
      <?php 
       $options = get_option('clsc_options_array');  
      @settings_fields('wp_plugin_template-group'); ?> 
      <?php @do_settings_fields('wp_plugin_template-group'); ?>   
      <div class="bootstrap-wrapper"> 
      <div class="row"> 
       <div class="col-md-12"> 
        <h1><?php _e('Custom Login Shortcode','clsc'); ?></h1> 
        <p><?php _e('To use for shortcode:','clsc'); ?><br/><span class="shortcode-preview">[custom_login]</span></p> 
       </div> 
      </div> 
      <div class="row" id="login-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in link:','clsc'); ?></h5> 
        <input name="clsc_options_array[Login_link]" placeholder="<?php _e('Example: /log-in/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in string:','clsc'); ?></h5> 
        <input name="clsc_options_array[Login_string]" placeholder="<?php _e('Example: Log in', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log in class:','clsc'); ?></h5> 
        <input name="clsc_options_array[Login_class]" placeholder="<?php _e('Example: login_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Login_class']; ?>" /> 
       </div> 
      </div> 
      <div class="row top-buffer" id="logout-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out link:','clsc'); ?></h5> 
        <input name="clsc_options_array[Logout_link]" placeholder="<?php _e('Example: /log-out/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out string:','clsc'); ?></h5> 
        <input name="clsc_options_array[Logout_string]" placeholder="<?php _e('Example: Log out', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Log out class:','clsc'); ?></h5> 
        <input name="clsc_options_array[Logout_class]" placeholder="<?php _e('Example: logout_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Logout_class']; ?>" /> 
       </div> 
      </div> 
      <div class="row top-buffer" id="account-content"> 
       <div class="col-md-4"> 
        <h5><?php _e('Account link:','clsc'); ?></h5> 
        <input name="clsc_options_array[Account_link]" placeholder="<?php _e('Example: /my-account/', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_link']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Account string:','clsc'); ?></h5> 
        <input name="clsc_options_array[Account_string]" placeholder="<?php _e('Example: My Account', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_string']; ?>" /> 
       </div> 
       <div class="col-md-4"> 
        <h5><?php _e('Account class:','clsc'); ?></h5> 
        <input name="clsc_options_array[Account_class]" placeholder="<?php _e('Example: account_style', 'clsc') ?>" class="form-control" type="text" value="<?php echo $options['Account_class']; ?>" /> 
       </div> 
      </div>    
     </div> 
      <?php @submit_button(); ?> 
     </form> 
    </div> 
    <?php 


} 
+0

更新コードを確認してください – vrajesh

+0

これはとても良いです!それは私が話したようにWordpressが汚い仕事をすることができることを本当に示している! settings_fieldsとdo_settings_fieldsの "@"が好きです。 さらに、なぜ@settings_fieldsで十分ではありませんか?なぜ "do_settings_fields"をする必要があるのですか? :) –

+0

あなたは「@」を削除することができます。詳細については、http://stackoverflow.com/questions/2002610/character-before-a-function-callを参照してください。 – vrajesh

1

フォームを使用しているので、送信時にupdate_optionを使用してオプション値を更新することができます。

参考URL:

https://codex.wordpress.org/Function_Reference/update_option

どのように使用するupdate_option

WordPress functions.php: how to apply update_option()?

function my_option_function() { 
    update_option('option_value','none'); 
} 
add_action('update_option', 'my_option_function'); ?> 

よりガイダンスについては、見てみましょう