web-dev-qa-db-fra.com

Zone Générer des champs personnalisés avancés dans la page du menu d'administration personnalisé

J'ai créé une page de menu d'administration personnalisée appelée FCC Youtube avec la fonction add_menu_page qui contient des champs personnalisés générés manuellement via HTML et PHP:

code (juste la partie comment j'ai créé cette page de menu d'administration personnalisée)

// creat admin menu page 
add_action("admin_menu","youtube_menu");
function youtube_menu() {
        add_menu_page('Youtube Channel Settings', 'FCC Youtube', 'edit_pages', 'youtube_channel_settings', 'youtube_channel_render_page','http://fcc.sportingpulse.com/wp-content/uploads/2013/04/youtube_icon16x16.png');
        add_action('admin_init','youtube_regsettings');
    }

see image

Je souhaite créer de nombreuses pages de menu d'administration, telles que la page Youtube de la FCC que j'ai créée. (FCC Vimeo, FCC Buttons, etc.)

Je souhaite que ces pages ont des groupes de champs ACF. Cela signifie que je peux créer des groupes de champs ACF et attribuer ce groupe à mes pages de menu administrateur personnalisées. Il fonctionnera exactement comme la page d’option ACF Option-addon.

ACF Option-addon ne me permet pas de créer plusieurs pages d’options de premier niveau. Je comprends que je peux créer plusieurs pages d’option de second niveau, mais je souhaite en avoir plusieurs de niveau supérieur, mais je ne comprends toujours pas comment faire cela!

J'ai acheté le module complémentaire Option mais cela ne me permet pas de créer plusieurs pages d'option "de niveau supérieur". Je n'ai qu'une page parent appelée "Options", puis de nombreuses sous-pages en dessous, je souhaite avoir d'autres "Top Les pages "Niveau" ont un autre nom que "Options", mais cela semble très difficile à faire: s,

regarde ça enter image description here

J'ai toutes ces pages d'options sous l'onglet 'Options' du parent, je ne peux pas les déplacer en dehors du parent

enter image description here

3
Ray Tsai

Exercice intéressant, un une page plugin qui croit mériter une page de menu de premier niveau est faux, IMO. J'utilise la même technique avec Jetpack.

Pour créer des sous-pages dans le module complémentaire Page d'options, lisez la documentation .

La logique de cette permutation de menu/sous-menu est la suivante:

  1. Ajouter plusieurs pages d'options ACF
  2. Créer notre menu de premier niveau
  3. Supprimer (masquer) notre page de plugin
  4. Ajouter (déplacer) notre page de plugin dans les fichiers ACF

Les étapes 1 et 2 doivent rendre cet exemple générique.
Pour l'utiliser avec n'importe quel autre plugin, seules les étapes 3 et 4 sont nécessaires, ajustant les slugs.
Pour le déplacer dans un menu par défaut WP, utilisez par exemple add_theme_page (Apparence) ou add_options_page (Paramètres).

<?php
/**
 * Plugin Name: Swap Menus and Sub-menus
 * Plugin URI: http://wordpress.stackexchange.com/q/95981/12615
 * Author: brasofilo
 * Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo
 * Licence: GPLv2 or later
 */

class Swap_Menus_WPSE_95981 {

    function __construct()
    {
        add_action( 'plugins_loaded', array( $this, 'modify_menus' ) );
    }

    function modify_menus() 
    {
        // 1) Add ACF Options pages
        if( function_exists( "register_options_page" ) )
        {
            register_options_page( 'Header' );
            register_options_page( 'Footer' );
        }

        // 2) Create this plugin page
        add_action( 'admin_menu', array( $this, 'add_aux_menu' ) );

        // 3) Remove (hide) this plugin page
        add_action( 'admin_init', array( $this, 'remove_aux_menu' ) );

        // 4) Move this plugin page into ACF Options page
        // Priority here (9999) is to put the submenu at last postition
        // If the priority is removed, the submenu is put at first position
        add_action( 'admin_menu', array( $this, 'add_aux_menu_again'), 9999 );
    }

    function add_aux_menu() 
    {
        add_menu_page(
            'Dummy Page First Level', 
            'Dummy Title', 
            'edit_posts', 
            'dummy-page-slug', 
            array( $this, 'menu_page_content' )
        );
    }

    function menu_page_content() 
    {
        ?>
            <div id="icon-post" class="icon32"></div>
            <h2>Dummy Page</h2>
            <p> Lorem ipsum</p>
        <?php
    }

    function remove_aux_menu() 
    {
        remove_menu_page( 'dummy-page-slug' ); 
    }


    function add_aux_menu_again() 
    {
        // To move into default pages, f.ex., use add_theme_page or add_options_page
        add_submenu_page(
            'acf-options-header', // <---- Destination menu slug
            'Dummy Page Second Level', 
            'Dummy Page Second Level', 
            'edit_posts', 
            'dummy-page-slug', 
            array( $this, 'menu_page_content' )
        );
    }
}

new Swap_Menus_WPSE_95981();
3
brasofilo