Опции ACF добавляют подменю с функцией обратного вызова - PullRequest
0 голосов
/ 15 ноября 2018

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

if( function_exists('acf_add_options_page') ) {

    acf_add_options_page(array(
        'page_title'    => 'Theme General Settings',
        'menu_title'    => 'Theme Settings',
        'menu_slug'     => 'theme-general-settings',
        'capability'    => 'edit_posts',
        'redirect'      => false
    ));

    acf_add_options_sub_page(array(
        'page_title'    => 'Theme Header Settings',
        'menu_title'    => 'Header',
        'parent_slug'   => 'theme-general-settings',
    ));

    acf_add_options_sub_page(array(
        'page_title'    => 'Theme Footer Settings',
        'menu_title'    => 'Footer',
        'parent_slug'   => 'theme-general-settings',
    ));

}

Что я пробовал

add_action( 'admin_menu', 'main_home' );

/**
 * Adds a submenu page under a custom post type parent.
 */
function main_home() {
    add_submenu_page(
        'theme-general-settings',
        __( 'Books Shortcode Reference', 'textdomain' ),
        __( 'Shortcode Reference', 'textdomain' ),
        'manage_options',
        'books-shortcode-ref',
        'books_ref_page_callback'
    );
}

/**
 * Display callback for the submenu page.
 */
function books_ref_page_callback() { 
    ?>
    <div class="wrap">
        <h1><?php _e( 'Books Shortcode Reference', 'textdomain' ); ?></h1>
        <p><?php _e( 'Helpful stuff here', 'textdomain' ); ?></p>
    </div>
    <?php
}

Результат Это не работает: URL становится похожим на: website.com/wp-admin/books-shortcode-ref

если я изменяю books-shortcode-ref на theme-general-settings, он работает, но становится таким же, как и используемый плагин acf. Мне нужно добавить опции, используя поля acf

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

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

Чтобы установить вашу страницу как дочернюю / дочернюю для существующего элемента (даже не нужно быть страницей параметров, опять же, моя - это CPT), просто укажите parent_slug в acf_add_options_page

'parent_slug'   => 'edit.php?post_type=orders',

Вот весь код

if( function_exists('acf_add_options_page') ) {
    acf_add_options_page(array(
        'page_title'    => 'ACF Options',
        'menu_title'    => 'ACF Options',
        'parent_slug'   => 'edit.php?post_type=orders',
        'menu_slug'     => 'books-ref-page',
        'redirect'      => false
    ));
}
function add_custom_option_page() {
    add_submenu_page(
        'edit.php?post_type=orders',
        __( 'Books Shortcode Reference', 'textdomain' ), 
        __( 'Shortcode Reference', 'textdomain' ),
        'manage_options', 
        'books-ref-page', 
        'books_ref_page_callback'
    );
} add_action('admin_menu', 'add_custom_option_page');
function books_ref_page_callback() {
     ?>
    <div class="wrap">
        <h1><?php _e( 'Books Shortcode Reference', 'textdomain' ); ?></h1>
        <p><?php _e( 'Helpful stuff here', 'textdomain' ); ?></p>
    </div>
    <?php
}
0 голосов
/ 04 февраля 2019

Вот код, который я только что использовал для добавления пользовательской страницы дополнительных параметров на страницу параметров ACF, примененную к вашему примеру.Вы должны объявить свою опционную страницу дважды с одним и тем же идентификатором (в ACF и обычным способом). Так, это немного сложно, но работает:

function add_acf_option_page() {
    if( function_exists('acf_add_options_page') ) {
        acf_add_options_page(array(
            'page_title'    => 'Theme General Settings',
            'menu_title'    => 'Theme Settings',
            'menu_slug'     => 'theme-general-settings',
            'capability'    => 'manage_options',
            'redirect'      => false
        ));
        acf_add_options_sub_page( array(
            'page_title'  => __( 'Books Shortcode Reference', 'textdomain' ),
            'menu_title'  => __( 'Shortcode Reference', 'textdomain' ),
            'parent_slug' => 'theme-general-settings',
            'capability' => 'manage_options',
            'menu_slug'   => 'books-ref-page',
        ) );
    }
}
add_action('acf/init', 'add_acf_option_page' );

function add_custom_option_page() {
    add_submenu_page( 
        null, 
        __( 'Books Shortcode Reference', 'textdomain' ), 
        __( 'Shortcode Reference', 'textdomain' ),
        'manage_options', 
        'books-ref-page', 
        'books_ref_page_callback'
}
add_action('admin_menu', 'add_custom_option_page');

function books_ref_page_callback() {
     ?>
    <div class="wrap">
        <h1><?php _e( 'Books Shortcode Reference', 'textdomain' ); ?></h1>
        <p><?php _e( 'Helpful stuff here', 'textdomain' ); ?></p>
    </div>
    <?php
}

Надеюсь, это поможет!

...