質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

1003閲覧

wordpress 設定画面の追加がうまくいかない

syws

総合スコア9

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2020/05/08 13:56

前提・実現したいこと

WordpressのSettings APIで 各カスタム投稿タイプ用の値を設定する設定画面 を作ろうとしています。
現時点でいくつかエラーが発生しており、原因がわからず投稿させていただきます。

発生している問題・エラーメッセージ

【問題1】「add_settings_field」のところで、フォームを2つ作りたいのですが、1つしかフォームが作成されません。

foreachで2つ分のフォーム設定が回されている事は確認したのですが、「add_settings_field」のところで、フォームが作成されず、下記画像のように、2番目のフォームだけ作成されます。
input_category_slug と input_post_ids の2つのフォームができてほしいです。
イメージ説明


【問題2】1つだけ作成されたフォームに値を保存しても、データベースに保存されません。

作成されたフォームに「test」といれて保存ボタンを押したのですが、リロード後に値が入っておらず、保存されません。データベースにも保存されていない事を確認しました。
イメージ説明

該当のソースコード

register_settingメソッドの値のサニタイズ用メソッドは、いったんコメントアウトで外しております。

<?php class CreateSettingsPage { private $options; private $post_type; private $settings = array(); public function __construct() { add_action('admin_menu', array($this, 'add_settings_page')); add_action('admin_init', array($this, 'settings_page_init')); $this->post_type = $_GET['post_type']; // var_dump($this->post_type); $this->settings = array( 'page' => 'post-type-settings-admin', 'page_title' => __('Post Type Settings', 'tcd-w'), 'page_slug' => 'post_type_top', 'option_name' => 'post_type_top', 'sections' => array( array( 'id_prefix' => 'post_type_settings', 'section_title' => __('Add Links to Post Type Top', 'tcd-w'), 'section_info' => __('Please input category page slug and post ids which are added to the post type top page', 'tcd-w'), 'fields' => array( // 2つ分のフォーム設定 array( 'field_id' => 'input_category_slug', 'field_title' => 'input_category_slug', 'type' => 'input', ), array( 'field_id' => 'input_post_ids', 'field_title' => 'input_post_ids', 'type' => 'input', ), ), ), // array(), ), ); } public function add_settings_page() { //put a menu within all custom types if apply $post_types = get_post_types(); foreach ($post_types as $post_type) { //check if there are any taxonomy for this post type $post_type_taxonomies = get_object_taxonomies($post_type); foreach ($post_type_taxonomies as $key => $taxonomy_name) { $taxonomy_info = get_taxonomy($taxonomy_name); if (empty($taxonomy_info->hierarchical) || $taxonomy_info->hierarchical !== TRUE) unset($post_type_taxonomies[$key]); } if (count($post_type_taxonomies) == 0) continue; if ($post_type == 'post') { add_submenu_page('edit.php', $this->settings['page_title'], $this->settings['page_title'], 'manage_options', $this->settings['page_slug'] . '_' . $post_type, array($this, 'create_admin_page')); } elseif ($post_type == 'attachment') { add_submenu_page('upload.php', $this->settings['page_title'], $this->settings['page_title'], 'manage_options', $this->settings['page_slug'] . '_' . $post_type, array($this, 'create_admin_page')); } else { add_submenu_page('edit.php?post_type=' . $post_type, $this->settings['page_title'], $this->settings['page_title'], 'manage_options', $this->settings['page_slug'] . '_' . $post_type, array($this, 'create_admin_page')); } } } public function create_admin_page() { $this->options = get_option($this->settings['sections']['option_name']); ?> <div class="wrap"> <h2><?php echo $this->settings['page_title']; ?></h2> <p></p> <?php settings_errors(); ?> <form method="post" action="options.php"> <?php settings_fields($this->settings['option_name'] . '_option_group'); do_settings_sections($this->settings['page']); submit_button(); ?> </form> </div> <?php } public function settings_page_init() { register_setting( $this->settings['option_name'] . '_option_group', // option_group $this->settings['sections']['option_name'] // , // option_name // array($this, 'sanitize') // sanitize_callback ); foreach ($this->settings['sections'] as $section) { add_settings_section( $section['id_prefix'] . '_section', // id $section['section_title'], // title array($this, 'section_info'), // callback $this->settings['page'] // page ); foreach ($section['fields'] as $field) { // フォームを複数作りたいのですが、上手くフォームが作成されません。 add_settings_field( $field['field_id_prefix'] . '_' . $this->post_type, // id $field['field_title'], // title array($this, $field['type']), // callback $this->settings['page'], // page $section['id_prefix'] . '_section', // section $field ); } } } public function sanitize($input) { return $input; } public function section_info() { echo $section['section_info']; } public function input($field) { printf( '<input class="regular-text" type="text" name="%s[%s]" id="%s" value="%s">', $this->settings['option_name'], $field['field_id'], $field['field_id'], isset($this->options[$field['field_id']]) ? esc_attr($this->options[$field['field_id']]) : '' ); } public function textarea($field) { printf( '<textarea class="large-text" rows="5" name="%s[%s]" id="%s">%s</textarea>', $this->settings['option_name'], $field['field_id'], $field['field_id'], isset($this->options[$field['field_id']]) ? esc_attr($this->options[$field['field_id']]) : '' ); } } if (is_admin()) $post_type_settings = new CreateSettingsPage();

何かエラー原因がわかる方ご教示頂ければ幸いです。何卒よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問