다중 설정 워드프레스 옵션 페이지 플러그인
플러그인에 대한 여러 설정이 포함된 옵션 페이지를 만들고 싶습니다.이 코드를 시작으로 사용하고 싶습니다: http://codex.wordpress.org/Creating_Options_Pages#Example_.232
<?php
class wctest{
public function __construct(){
if(is_admin()){
add_action('admin_menu', array($this, 'add_plugin_page'));
add_action('admin_init', array($this, 'page_init'));
}
}
public function add_plugin_page(){
// This page will be under "Settings"
add_options_page('Settings Admin', 'Settings', 'manage_options', 'test-setting-admin', array($this, 'create_admin_page'));
}
public function create_admin_page(){
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2>Settings</h2>
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields('test_option_group');
do_settings_sections('test-setting-admin');
?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
public function page_init(){
register_setting('test_option_group', 'array_key', array($this, 'check_ID'));
add_settings_section(
'setting_section_id',
'Setting',
array($this, 'print_section_info'),
'test-setting-admin'
);
add_settings_field(
'some_id',
'Some ID(Title)',
array($this, 'create_an_id_field'),
'test-setting-admin',
'setting_section_id'
);
}
public function check_ID($input){
if(is_numeric($input['some_id'])){
$mid = $input['some_id'];
if(get_option('test_some_id') === FALSE){
add_option('test_some_id', $mid);
}else{
update_option('test_some_id', $mid);
}
}else{
$mid = '';
}
return $mid;
}
public function print_section_info(){
print 'Enter your setting below:';
}
public function create_an_id_field(){
?><input type="text" id="input_whatever_unique_id_I_want" name="array_key[some_id]" value="<?=get_option('test_some_id');?>" /><?php
}
}
$wctest = new wctest();
페이지의 코드 아래와 같이 모든 것이 작동하지만, 두 번째 설정을 추가하고 싶습니다.다른 설정 섹션과 설정 필드를 추가하고 값을 안전하게 보호하려면 어떻게 해야 합니까?나는 지금 반나절을 곤혹스럽게 생각하고 있지만, 운이 없습니다.
누가 좀 도와주시겠습니까?이것은 나의 첫 번째 플러그인이고 이 부분을 이해한다면 나는 나머지를 할 수 있습니다.
방금 Codex: Creating_Options_Pages#Example_232의 예제를 수정했습니다.이제 두 번째 설정 필드가 포함됩니다.세정 기능은 더 쉽게 이해하고 확장할 수 있습니다.또한 변수 이름을 변경하고 코드에 문서를 추가했습니다.지금은 논리를 따르는 게 더 쉬운 것 같아요.꽉 찼습니다.
<?php
class MySettingsPage
{
/**
* Holds the values to be used in the fields callbacks
*/
private $options;
/**
* Start up
*/
public function __construct()
{
add_action( 'admin_menu', array( $this, 'add_plugin_page' ) );
add_action( 'admin_init', array( $this, 'page_init' ) );
}
/**
* Add options page
*/
public function add_plugin_page()
{
// This page will be under "Settings"
add_options_page(
'Settings Admin',
'My Settings',
'manage_options',
'my-setting-admin',
array( $this, 'create_admin_page' )
);
}
/**
* Options page callback
*/
public function create_admin_page()
{
// Set class property
$this->options = get_option( 'my_option_name' );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2>My Settings</h2>
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields( 'my_option_group' );
do_settings_sections( 'my-setting-admin' );
submit_button();
?>
</form>
</div>
<?php
}
/**
* Register and add settings
*/
public function page_init()
{
register_setting(
'my_option_group', // Option group
'my_option_name', // Option name
array( $this, 'sanitize' ) // Sanitize
);
add_settings_section(
'setting_section_id', // ID
'My Custom Settings', // Title
array( $this, 'print_section_info' ), // Callback
'my-setting-admin' // Page
);
add_settings_field(
'id_number', // ID
'ID Number', // Title
array( $this, 'id_number_callback' ), // Callback
'my-setting-admin', // Page
'setting_section_id' // Section
);
add_settings_field(
'title',
'Title',
array( $this, 'title_callback' ),
'my-setting-admin',
'setting_section_id'
);
}
/**
* Sanitize each setting field as needed
*
* @param array $input Contains all settings fields as array keys
*/
public function sanitize( $input )
{
$new_input = array();
if( isset( $input['id_number'] ) )
$new_input['id_number'] = absint( $input['id_number'] );
if( isset( $input['title'] ) )
$new_input['title'] = sanitize_text_field( $input['title'] );
return $new_input;
}
/**
* Print the Section text
*/
public function print_section_info()
{
print 'Enter your settings below:';
}
/**
* Get the settings option array and print one of its values
*/
public function id_number_callback()
{
printf(
'<input type="text" id="id_number" name="my_option_name[id_number]" value="%s" />',
isset( $this->options['id_number'] ) ? esc_attr( $this->options['id_number']) : ''
);
}
/**
* Get the settings option array and print one of its values
*/
public function title_callback()
{
printf(
'<input type="text" id="title" name="my_option_name[title]" value="%s" />',
isset( $this->options['title'] ) ? esc_attr( $this->options['title']) : ''
);
}
}
if( is_admin() )
$my_settings_page = new MySettingsPage();
새 Settings Sections(설정 섹션)을 추가하려면 이 작업을 수행하고 원하는 Settings Fields(설정 필드)를 새 섹션으로 가리키기만 하면 됩니다.
필요한 경우 다음을 사용하여 정보를 끌어 올립니다.
추가 섹션을 추가하려면 첫 번째 섹션의 ID 파라미터를 첫 번째 설정의 ID와 다른 것으로 설정해야 합니다.
add_settings_section(
'setting_section_new', // ID
'My Custom Settings', // Title
array( $this, 'print_section_info' ), // Callback
'my-setting-admin' // Page
);
언급URL : https://stackoverflow.com/questions/17798378/multiple-settings-wordpress-options-page-plugin
'source' 카테고리의 다른 글
MySQL Workbench를 사용하여 Diff 두 데이터베이스를 스키마 하는 방법? (0) | 2023.10.12 |
---|---|
0과 1 사이의 난수를 생성하는 방법은? (0) | 2023.10.12 |
부모의 패딩을 무시하는 절대 포지셔닝 (0) | 2023.10.12 |
불변 위반:텍스트 문자열은 구성 요소 내에서 렌더링되어야 합니다. (0) | 2023.10.12 |
농담에서 모의 던지기 오류를 적절하게 만드는 방법은? (0) | 2023.10.12 |