WordPress에서 작은 관리 페이지를 만드는 코드

18725 단어 PHPsnippetsWordPress

대시보드 설정 페이지 코드 단순화


워드프레스에서는 테마에 관리용 항목을 설정하고 싶을 때가 있습니다.전용 플러그인을 만들지 않거나 과장하지 않아도 2~3개의 작은 옵션 항목만 설정할 때의 간단한 페이지 설정 관리 방법입니다.

참고로


설정 페이지 만들기(Codex)
이 페이지에서 소개한 설정 API를 사용하여 일반적인 설정 페이지를 만드는 코드를 써 보았습니다.
functions.php에 붙여서 사용합니다.

페이지 생성 코드 관리


functions.php
class mySettingPage{
  public static $key='my_option_name';//オプションへの保存、呼び出しキー

  private $html_title='HTMLタグのtitle';//HTMLのタイトル(管理ページのtitleタグ)
  private $page_title='ページのタイトル';//ページのタイトル
  private $page_slug='my_option_page';

  private $options;
  private $group='my_option_group';
  private $section='my_setting_admin';

  //ここにキーとタイトル、コールバックをセットにして
  public static function getFields(){

    return array(
      array(
        'type'=>'section',//区切りを入れるときはtypeをセクションにする
        'name'=>'section1',
        'title'=>'入力してください',
        'callback'=>'section_callback',
      ),
      array(
        'type'=>'field',//フィールドかセクション お好みに合わせて追加
        'name'=>'item1',//名前
        'title'=>'項目1',//タイトル
        'callback'=>'text_callback',//コールバック
      ),
      array(
        'type'=>'field',
        'name'=>'tel',
        'title'=>'電話',
        'callback'=>'text_callback',
      ),
      array(
        'type'=>'section',//区切りを入れるときはtypeをセクションにする
        'name'=>'section2',
        'title'=>'',
        'callback'=>'section_callback',
      ),
      array(
        'type'=>'field',
        'name'=>'address',
        'title'=>'住所',
        'callback'=>'text_callback',
      ),
    );
  }

  //初期化
  public function __construct(){
      add_action('admin_menu',array($this,'add_my_option_page'));
      add_action('admin_init',array($this,'page_init'));
  }

  //キーを取得(外部から呼び出せるようにする)
  public static function getKey(){
    return self::$key;
  }

  //設定
  public function add_my_option_page(){
      add_options_page(
          $this->html_title,//ダッシュボードのメニューに表示するテキスト
          $this->page_title,//ページのタイトル
          'edit_themes',
          $this->page_slug,//ページスラッグ
          array( $this, 'create_admin_page' )
      );
  }

  //フォームの外観作成
  public function create_admin_page(){
      // Set class property
      $this->options = get_option($this->getKey());
      ?>
      <div class="wrap">
          <?php screen_icon(); ?>
          <h2><?php echo $this->page_title;?></h2>
          <p>テーマ用の設定項目</p>
          <form method="post" action="options.php">
          <?php
              // This prints out all hidden setting fields
              settings_fields($this->group);
              do_settings_sections($this->section);
              submit_button();
          ?>
          </form>
      </div>
      <?php
  }

  //フォームの部品組み立て
  public function page_init(){
    register_setting(
      $this->group, // Option group
      $this->getKey(), // Option name
      array( $this, 'sanitize' ) // Sanitize
    );

    $fields=$this->getFields();
    $section_id='';
    foreach($fields AS $field){
      if($field['type']=='field'){
        add_settings_section(
          $field['name'], // ID
          $field['title'], // Title
          array($this,$field['callback']), // Callback
          $this->section, // Page
          $section_id
        );
      }else{
        add_settings_section(
          $field['name'], // ID
          $field['title'], // Title
          array($this,$field['callback']), // Callback
          $this->section // Page
        );
        $section_id=$field['name'];
      }
    }
  }

  //保存前のサニタイズ
  public function sanitize($input){

    $new_input = array();
    foreach($this->getFields() AS $field){
      if(isset($input[$field['name']])){
        $new_input[$field['name']] = sanitize_text_field($input[$field['name']]);
      }
    }
    return $new_input;
  }

  //セクション表示関数
  public function section_callback(array $args){
    echo '<hr>';
  }

  //テキストフィール表示関数
  public function text_callback(array $args){
    $name=$args['id'];
    printf(
      '<input type="text" id="'.$name.'" name="'.$this->getKey().'['.$name.']" value="%s" />',
      isset( $this->options[$name] ) ? esc_attr( $this->options[$name]) : ''
    );
  }


}

if(is_admin())
    $my_settings_page = new mySettingPage();

사용 방법

  • 이상 코드는functions입니다.php에 붙여넣습니다
  • html_title 및 page_제목을 변경합니다
  • getFields 내용 변경
  • 기타 필요할 때 고쳐 주세요
  • 이렇게 하면 계기판 메뉴의 설정에서 설정 페이지를 완성할 수 있다
  • 너는 이런 느낌을 낼 수 있다



    등록된 항목 사용


    아래 코드로 호출<?php $options=get_option(mySettingPage::getKey());?>
    표시된 곳에서<?php echo esc_html($options['item1']);?>
    <?php echo esc_html($options['tel']);?>
    <?php echo esc_html($options['address']);?>
    아주 간단한 내용이지만 주제를 만들다 보면 가끔씩 주제가 나름대로 가치가 있으면 좋겠다는 생각이 들기 때문에 이럴 때.

    웹 페이지 정보


    설정 페이지 만들기(Codex)
    add_settings_field 리셋 매개 변수

    좋은 웹페이지 즐겨찾기