Создать страницу пользовательских настроек для пользовательского типа записи WordPress

#wordpress #menu #settings #admin #custom-post-type

#wordpress #меню #Настройки #администратор #пользовательский тип записи

Вопрос:

У меня есть пользовательский тип записи WordPress, который я создал. CPT создан нормально и успешно добавлен в меню WordPress.

Я создал CPT с помощью этого кода:

 /**
     * Registers the WPBP custom post types
     */
    function register_wpbp_post_type(){
        register_post_type($this->cpt,
        array(
            'labels' => array(
                'name'                  => __('Backgrounds', $this->prefix),
                'singular_name'         => __('Background', $this->prefix),
                'menu_name'             => __('WP BG Pro', $this->prefix),
                'add_new'               => __('Add New', $this->prefix),
                'add_new_item'          => __('Add New Background', $this->prefix),
                'edit_item'             => __('Edit Background', $this->prefix),
                'new_item'              => __('New Background', $this->prefix),
                'view_item'             => __('View Background', $this->prefix),
                'search_items'          => __('Search Background', $this->prefix),
                'not_found'             => __('No Background Found', $this->prefix),
                'not_found_in_trash'    => __('No Background Found In Trash', $this->prefix),
                'parent_item_colon'     => ''
            ),
            'public'                => false,
            'publicly_queryable'    => false,
            'hierarchial'           => false,
            '_builtin'              => false,
            '_edit_link'            => 'post.php?post=%d',
            'show_ui'               => true,
            'exclude_from_search'   => true,
            'show_in_nav_menus'     => false,
            'capability_type'       => 'post',
            'can_export'            => true,
            'has_archive'           => false,
            'supports'              => array('title'),
            'menu_icon'             => '',
            )
        );
    }
  

Чего я пытаюсь добиться, так это создать страницу пользовательских настроек для CPT, которая вложена в пункт меню CPT, как показано на скриншоте ниже.

На изображении показана страница пользовательских настроек, которую я хочу создать для CPT.

введите описание изображения здесь

Я смог добавить пользовательскую ссылку «Настройки» в свой CPT с помощью этого кода.

 /**
* Add a link to the WordPress menu
*/
public function add_option_page() {

    add_submenu_page('edit.php?post_type=wpbp-backgrounds', 'WP Backgrounds Pro', __('Settings', $this->hook), $this->accesslvl, 'wpbp_options', array(amp;$this, 'display_admin_page'));

}
  

Проблема

Если вы нажмете на ссылку «Настройки», она приведет вас к этому URL

edit.php?post_type=wpbp-backgroundsamp;page=wpbp_options

Что происходит, когда вы пытаетесь сохранить настройки для этой страницы, они никогда не сохраняются в базе данных. Я получаю этот URL-адрес, измененный на URL-адрес страницы:

edit.php?post_type=wpbp-backgroundsamp;page=wpbp_optionsamp;settings-обновлено = true

но я никогда не вижу окно диалога / сообщения, в котором сообщается, что настройки были сохранены.

Я надеюсь, что это имеет смысл, и кто-то может предложить некоторые полезные советы. Спасибо

РЕДАКТИРОВАНИЕ — Добавление полей var_dump и скрытых форм.

Я отправляю форму администратора на:

 <form action="" method="post" class="wpbp-form" enctype="multipart/form-data">
  

Вот результаты var_dump, если они добавлены в форму.

 array(6) {
  ["option_page"]=> string(12) "wpbp_options"
  ["action"]=> string(6) "update"
  ["_wpnonce"]=> string(10) "2584accf5f"
  ["_wp_http_referer"]=> string(77) "/wordpress-dev/wp-admin/edit.php?post_type=wpbp-backgroundsamp;page=wpbp_options"
  ["wpbp_options"]=>
  array(3) {
    ["default_background"]=> string(1) "0"
    ["in_types"]=> string(5) "Posts"
    ["in_taxonomies"]=> string(8) "Category"
  }
  ["Submit"]=> string(12) "Save Changes"
}
  

Результаты скрытых полей формы

Это скрытые поля, которые автоматически добавляются в форму через API настроек WP.

 <input type='hidden' name='option_page' value='wpbp_options' />
<input type="hidden" name="action" value="update" />
<input type="hidden" id="_wpnonce" name="_wpnonce" value="2584accf5f" />
<input type="hidden" name="_wp_http_referer" value="/wordpress-dev/wp-admin/edit.php?post_type=wpbp-backgroundsamp;amp;page=wpbp_options" />
  

Комментарии:

1. не видя вашего кода, довольно сложно сказать. Страница похожа на любую другую страницу, вы можете настроить форму для отправки на ту же страницу и var_dump ($ _POST), чтобы увидеть, что вы передаете. <form action=»» method=»POST» enctype=»multipart/form-data»> . Если вы не можете заставить ее работать, опубликуйте свою функцию display_admin_page, я посмотрю на это завтра.

2. Привет @David, спасибо за ваш ответ. Я взглянул на форму, и она публикуется в «<form action=»options.php » метод=»post» класс =»wpbp-форма» enctype=»составная часть / форма-данные»>». Я изменю его на «edit.php » и посмотрим, решит ли это проблему.

3. @David Я внес изменения в вопрос и добавил результаты скрытых полей формы и var_dump к первоначальному вопросу.

4. Проблема, похоже, в том, что я создал страницу параметров под URL страницы «edit.php » и не «options.php «. Это необходимо сделать, чтобы иметь возможность вставить ссылку под пользовательский тип записи. Если я изменю действие формы на «options.php «Я получаю атрибут amp;settings-updated=true, добавленный к URL-адресу (но настройки по-прежнему не обновляются в базе данных). Если я отправляю форму обратно к себе, она не обновляет базу данных и не добавляет ничего к URL-адресу, а также не отображает и не обновляет сообщения.

5. какова ваша функция $ _post? в update_option() не так уж много ошибок, но если вы введете $ var, равный ему, он обновит false в случае сбоя (или если то же значение уже существует, поэтому никаких действий не требуется)

Ответ №1:

Вы хотите добавить ссылку на пользовательский тип записи в меню страницы параметров?

Я использую этот код для своих тем.

 add_action('admin_menu', 'nivo_register_my_custom_submenu_page');
function nivo_register_my_custom_submenu_page() {
add_submenu_page( 
    'nivothemes-settings', //options page url
    __('Taksit Tablosu İçeriği', 'nivothemes'),
    __('Taksit Tablosu', 'nivothemes'),
    'manage_options', 
    'edit.php?post_type=installement'
);
}