add_menu_page() cu nume diferit pentru primul element submeniu

28 sept. 2012, 02:13:01
Vizualizări: 109K
Voturi: 128

Documentația add_menu_page spune să transmitem titlul meniului ca al doilea parametru:

add_menu_page('Titlu Pagină', 'Titlu Meniu', ...);

Când adăugăm mai multe pagini ulterior prin add_submenu_page, pagina principală devine prima intrare în submeniu:

Exemplu de submeniu WordPress cu prima intrare implicită


Cu toate acestea, vreau ca primul element din listă să aibă un nume diferit (dar să indice către aceeași pagină), în modul în care o face WordPress:

Exemplu de submeniu WordPress cu prima intrare personalizată


Cum aș putea realiza acest lucru în plugin-ul meu?

0
Toate răspunsurile la întrebare 7
7
182

Poți face 'slug'-ul pentru pagina de submeniu să fie același cu cel al paginii principale, iar ele vor indica aceeași locație:

add_action('admin_menu', 'my_menu_pages');
function my_menu_pages(){
    add_menu_page('Titlul Paginii Mele', 'Titlul Meniului Meu', 'manage_options', 'my-menu', 'my_menu_output' );
    add_submenu_page('my-menu', 'Titlul Paginii de Submeniu', 'Orice Vrei Tu', 'manage_options', 'my-menu' );
    add_submenu_page('my-menu', 'Titlul Paginii de Submeniu2', 'Orice Vrei Tu2', 'manage_options', 'my-menu2' );
}

Exemplu:

Exemplu de structură de meniu în WordPress

28 sept. 2012 02:36:40
Comentarii

Aceasta ar duce la intrări duplicate, deoarece WordPress creează automat o pagină de submeniu pentru pagina principală.

MegaHit MegaHit
28 sept. 2012 02:37:55

Îmi amintesc că am răsfoit codul de bază săptămâna trecută și am dat peste o notă care spunea ceva de genul: "Adaugă elementul implicit de submeniu DACĂ UTILIZATORUL NU ARE DEJA". Verifică dacă există deja un element de submeniu care indică către elementul de nivel superior. Dacă există, nu adaugă cel implicit.

Michael Lewis Michael Lewis
28 sept. 2012 02:40:02

Vreau ca atunci când creez un meniu personalizat să pot afișa niște tabele și date, așa cum sunt afișate alte file, un link de tutorial sau niște funcții. Orice ajutor va fi apreciat.

Aitazaz Khan Aitazaz Khan
23 oct. 2016 22:40:09

Exact ce căutam. Mersi :P

Rob D. A. Rob D. A.
10 sept. 2018 18:13:17

și pentru mine încă funcționează...

Sajjadur Rahman Sagor Sajjadur Rahman Sagor
7 apr. 2020 01:01:47

Funcționează perfect. Asigură-te că ai cel puțin un submeniu în afară de primul, deoarece primul submeniu este direcționat către slug-ul părintelui. Dacă nu, submeniurile tale nu vor fi vizibile.

Dushan Dushan
5 iun. 2021 21:06:59

Evident, funcționează în continuare pentru WP 5.9. Deoarece callback-ul pentru add_menu_page este opțional, l-am eliminat și m-am asigurat doar că slug-ul pentru meniu și primul submeniu sunt identice. După cum a spus @MichaelLewis, acest lucru duce la eliminarea primului submeniu implicit/redundant. Bravo!

TonyG TonyG
25 feb. 2022 00:30:16
Arată celelalte 2 comentarii
0
12

Faceți slug-ul elementului de meniu părinte și sub-meniu același (primul element) ca mai jos

function actions_recent_bids_add_admin_page(){

    add_menu_page(
          'Ofertări Recente',          // titlul paginii
          'Rapoarte Licitații',        // titlul meniului
          'manage_options',             // capabilitatea
          'wc-auction-reports',         // slug
          'actions_recent_bids_list',   // funcția callback
          'dashicons-chart-area',       // iconița
           56                           // poziția
    );

    add_submenu_page(
          'wc-auction-reports',               // slug părinte
          'Ofertări Recente',                 // titlul paginii
          'Ofertări Recente',                 // titlul meniului
          'manage_options',                   // capabilitatea
          'wc-auction-reports',               // slug
          'acutions_customers_spendings_list' // funcția callback
    );


    add_submenu_page(
          'wc-auction-reports',               // slug părinte
          'Cheltuieli Clienți',              // titlul paginii
          'Cheltuieli Clienți',               // titlul meniului
          'manage_options',                   // capabilitatea
          'wc-acutions-customers-spendings',  // slug
          'acutions_customers_spendings_list'  // funcția callback
    );

    add_submenu_page(
          'wc-auction-reports',          // slug părinte
          'Ofertări Clienți',            // titlul paginii
          'Ofertări Clienți',            // titlul meniului
          'manage_options',              // capabilitatea
          'wc-acutions-customers-bids',  // slug
          'acutions_customers_bids_list' // funcția callback
    );
}

add_action('admin_menu','actions_recent_bids_add_admin_page');
8 dec. 2019 11:46:12
3

Salut, tocmai am petrecut o eternitate căutând acest lucru și metoda corectă nu este listată aici. Ceea ce vrei să folosești este:

remove_submenu_page('parent_slug','parent_slug'); 

la sfârșitul funcției tale

Exemplu :

function posts_sync_menu() {
// Elementul Principal din Meniu (acționează ca un suport)
add_menu_page(
    'Postările Mele',        // Titlul paginii
    'Postările Mele',        // Titlul meniului
    'manage_options',        // Capabilitatea
    'my-posts',             // Slug-ul meniului necesar doar pentru inițializare.
    '',                     // Nu este necesară nicio funcție/callback
    'dashicons-networking', // Pictogramă
    6                       // Poziție
);

add_submenu_page(
    'my-posts',             // Slug-ul părintelui
    'Listarea Postărilor Mele', // Titlul paginii
    'Listarea Postărilor Mele', // Titlul meniului
    'manage_options',       // Capabilitatea
    'my-posts-listing',     // Slug
    'my_posts_callback'     // Callback pentru randarea paginii
);

// Elimină intrarea sub-meniului părinte și preia slug-ul din "Listarea Postărilor Mele" 
remove_submenu_page('my-posts','my-posts'); 

}

Va afișa asta:

imagine cu rezultatul meniului

Deci, practic, vor avea același slug cu denumiri diferite ale meniurilor, exact cum a fost cerut.

8 mar. 2022 17:24:17
Comentarii

Dar întrebarea este despre adăugarea unui meniu duplicat, nu despre eliminarea unuia?

Rup Rup
8 mar. 2022 18:31:27

S-ar putea realiza prin eliminarea intrării originale și apoi adăugarea uneia noi cu un nume diferit, dar cu același slug. Doar o idee!

prismspecs prismspecs
9 mar. 2022 22:49:49

@Rup el va realiza asta folosind acest lucru, acesta este răspunsul corect la întrebare.

Alin Razvan Alin Razvan
11 oct. 2024 14:01:02
0

Actualizare!!! Dacă nu sunteți sigur dacă meniul părinte există, puteți verifica mai întâi astfel:

function contacts_page_submenu(){
    // Verifică dacă meniul există (dacă Părintele Există), nu avem nevoie dar el a scris :| (sunt editorul)
    if(menu_page_url('contacts-parent-menu', false )){
        // Schimbă Textul Primului Submeniu
        add_submenu_page(
            'contacts-parent-menu', // Slug Părinte necesar
            'Setări Contacte', 
            'Setări Contacte',
            'manage_options',
            'contacts-parent-menu', //Slug Părinte necesar
            'contacts_submenu_callback' // Dă numele funcției de callback pentru Părinte
        );
    }
}

add_action('admin_menu', 'contacts_page_submenu');

Testat și funcționează în WordPress 6.

Referință: https://developer.wordpress.org/reference/functions/add_submenu_page/

18 iul. 2023 01:21:10
0
function content_adder_menu() {
    add_menu_page(
        'Conținut',     // Titlul paginii
        'Conținut',     // Titlul meniului
        'manage_options',    // Capabilitatea necesară pentru acces
        'content-adder',     // Slug-ul meniului
        'content_adder_page' // Funcția callback pentru afișarea paginii
    );

    // Adaugă o pagină de submeniu sub meniul principal
    add_submenu_page(
        'content-adder',    // Slug-ul meniului părinte
        'Adaugă Conținut',      // Titlul paginii
        'Adaugă Conținut',      // Titlul meniului
        'manage_options',   // Capabilitatea necesară pentru acces
        'add-content',      // Slug-ul meniului
        'add_content_page'  // Funcția callback pentru afișarea paginii
    );
}

// Funcția callback pentru pagina meniului principal
function content_adder_page() {
    // Afișează conținutul paginii meniului principal aici
    echo '<div class="wrap">';
    echo '<h1>Bun venit la Conținut</h1>';
    // Preia articolele din tipul de postare 'post'
    $args = array(
        'post_type' => 'post', // Ajustează tipul de postare după necesități
        'post_status' => 'publish', // Preia doar articole publicate
        'posts_per_page' => -1, // Preia toate articolele
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        echo '<h2>Lista de Articole</h2>';
        echo '<ul>';
        while ($query->have_posts()) {
            $query->the_post();
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
        wp_reset_postdata(); // Restabilește datele globale ale postării
    } else {
        echo '<p>Nu s-au găsit articole.</p>';
    }
    echo '</div>';
}

// Funcția callback pentru pagina de submeniu
function add_content_page() {
    // Afișează conținutul paginii de submeniu aici
    echo '<div class="wrap">';
    echo '<h1>Adaugă Conținut</h1>';
    // Verifică dacă formularul a fost trimis
    if(isset($_POST['submit'])) {
        // Procesează datele din formular aici
        $url = sanitize_text_field($_POST['url']);
        $content = wp_kses_post($_POST['content']);
        
        // Salvează sau folosește datele trimise după necesități
        // De exemplu, le poți salva într-un tip de postare personalizat sau le poți afișa
        $new_post = array(
            'post_title'    => 'Titlul Postării Tale',
            'post_content'  => $content, // Conținutul pe care dorești să îl salvezi
            'post_status'   => 'publish', // Publică postarea
            'post_author'   => 1, // ID-ul autorului (1 este de obicei administratorul)
            'post_type'     => 'post', // Tipul de postare (schimbă dacă este necesar)
        );
        $post_id = wp_insert_post($new_post);

        if ($post_id) {
            // Postarea a fost creată cu succes
            echo 'Postarea ID ' . $post_id . ' a fost creată.';
        } else {
            // A apărut o eroare
            echo 'Eroare la crearea postării.';
        }

        echo "<p>URL: $url</p>";
        echo "<div>Conținut: $content</div>";
    } else {
        // Afișează formularul
        echo '<form method="post">';
        echo '<label for="url">Adaugă URL:</label> <br>';
        echo '<input type="text" name="url" id="url" /><br />';
        echo '<label for="content">Adaugă Conținut:</label> <br>';
        echo '<textarea name="content" id="content" rows="5" cols="40"></textarea><br />';
        echo '<input type="submit" name="submit" value="Adaugă Conținut" class="button button-primary" />';
        echo '</form>';
    }
    
    echo '</div>';
}

add_action('admin_menu', 'content_adder_menu');
29 sept. 2023 13:19:55
1
-2

Pur și simplu adaugă asta:

$submenu['my-menu'][0][0] = 'Titlul meu nou de meniu';

Pentru depanare, poți folosi print_r($menu) pentru a verifica întregul meniu WP.

18 iun. 2013 08:37:13
Comentarii

Hack hack. Folosește API-ul!

Richard Sweeney Richard Sweeney
12 apr. 2016 10:51:44
1
-3
add_submenu_page(
        'tut_theme_settings',       // slug-ul părinte
        'Elementele Paginii Principale 2',    // titlul paginii
        'Pagina Principală 2',             // titlul din meniu
        'manage_options',           // capabilitatea
        'tut_theme_settings2',      // slug
        'theme_front_page_settings' // funcția de callback
    );

dacă numele primului sub-meniu este diferit, creează același slug pentru părinte și primul copil și apelează aceeași funcție

29 sept. 2016 09:13:12
Comentarii

Care este diferența față de răspunsul acceptat? Și la ce acțiune ar trebui să fie conectat acest lucru.

bravokeyl bravokeyl
29 sept. 2016 10:00:03