параметр CMB2 option-page

CMB2 имеет возможность использовать в качестве страницы параметров.

Я смотрю в файлах примеров и на странице вики, но даже копирование и вставка примера в файлы не работают.

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

Следуя вики и примеру, я изменил этот код

add_action( 'cmb2_admin_init', 'yourprefix_register_theme_options_metabox' );
function yourprefix_register_theme_options_metabox() {

    $option_key = 'wherever';

    $cmb = new_cmb2_box( array(
        'id'=> $option_key . '_theme_options-page',
        'object_types' => array( 'options-page' ),
        'hookup'  => false,
        'menu_title' => 'Site Options',
        'parent_slug' => 'tools.php',
        'capability' => 'manage_options'
    ) );

    $cmb->add_field( array(
        'name'    => 'Site Background Color',
        'desc'    => 'field description',
        'id'      => 'bg_color',
        'type'    => 'colorpicker',
        'default' => '#ffffff'
    ) );

}

Любые выводы о том, почему это не работает?


person Mateus Silva    schedule 20.05.2017    source источник


Ответы (1)


В настоящее время документация по возможностям страницы параметров CMB2 просто ведет вас к их Библиотека фрагментов, которая не является на 100 % простой, поэтому, надеюсь, я смогу объяснить, как правильно использовать эти функции.

Во-первых, метабоксы, которые вы регистрируете в cmb2_admin_init, могут генерировать целую страницу администратора. Возьмите этот пример кода прямо из библиотеки фрагментов, например:

add_action('cmb2_admin_init', 'register_my_admin_page');
function register_my_admin_page() {
  /**
   * Registers options page menu item and form.
   */
  $cmb_options = new_cmb2_box( array(
    'id'           => 'myprefix_option_metabox',
    'title'        => esc_html__( 'Site Options', 'myprefix' ),
    'object_types' => array( 'options-page' ),
    /*
      * The following parameters are specific to the options-page box
      * Several of these parameters are passed along to add_menu_page()/add_submenu_page().
      */
    'option_key'      => 'myprefix_options', // The option key and admin menu page slug.
    // 'icon_url'        => 'dashicons-palmtree', // Menu icon. Only applicable if 'parent_slug' is left empty.
    // 'menu_title'      => esc_html__( 'Options', 'myprefix' ), // Falls back to 'title' (above).
    // 'parent_slug'     => 'themes.php', // Make options page a submenu item of the themes menu.
    // 'capability'      => 'manage_options', // Cap required to view options-page.
    // 'position'        => 1, // Menu position. Only applicable if 'parent_slug' is left empty.
    // 'admin_menu_hook' => 'network_admin_menu', // 'network_admin_menu' to add network-level options page.
    // 'display_cb'      => false, // Override the options-page form output (CMB2_Hookup::options_page_output()).
    // 'save_button'     => esc_html__( 'Save Theme Options', 'myprefix' ), // The text for the options-page save button. Defaults to 'Save'.
  ) );

  /*
    * Options fields ids only need
    * to be unique within this box.
    * Prefix is not needed.
    */
  $cmb_options->add_field( array(
    'name' => __( 'Test Text', 'myprefix' ),
    'desc' => __( 'field description (optional)', 'myprefix' ),
    'id'   => 'test_text',
    'type' => 'text',
    'default' => 'Default Text',
  ) );
  $cmb_options->add_field( array(
    'name'    => __( 'Test Color Picker', 'myprefix' ),
    'desc'    => __( 'field description (optional)', 'myprefix' ),
    'id'      => 'test_colorpicker',
    'type'    => 'colorpicker',
    'default' => '#bada55',
  ) );
}

Этот фрагмент кода создаст страницу администрирования верхнего уровня под названием «Параметры сайта» с двумя полями: текстовым полем и полем выбора цвета с заголовком, полями формы, кнопкой отправки и т. д. Вы можете настроить способ отображения страницы. отображается пользователю с помощью закомментированных настроек функции new_cmb2_box.

Когда форма будет сохранена, она сохранит мета-поле и его поля в параметре сайта myprefix_options. Итак, если вы вызовете функцию get_option('myprefix_options'), она вернет следующий массив:

array(
  'myprefix_option_metabox' => array(
    'test_text' => '' // value of the Test Text field,
    'test_colorpicker' => '' // value of the Test Color Picker field
  )
)

Я надеюсь, что это поможет немного прояснить ситуацию.

person Jake Bellacera    schedule 25.01.2019
comment
Давно я об этом спрашивал, но если я не ошибаюсь, страница не появлялась в меню (я действительно не помню, в чем была проблема). Я больше не работаю с wordpress, поэтому не могу проверить. - person Mateus Silva; 27.01.2019