web-dev-qa-db-fra.com

Comment obtenir le titre de l'élément de menu actuel en tant que variable?

Est-il possible d'obtenir item-menu-item en tant que variable php?

J'énumère les musées de la catégorie dans le menu "Musées que nous soutenons". J'aimerais donc que l'élément "Récupérer les musées que nous supportons" soit affiché quelque part?

Toute aide appréciée!

10
v3nt

Ceci est possible en filtrant wp_nav_menu_objects, qui est le moyen le plus facile de vérifier quel élément est l’élément de menu actuel, car WordPress a déjà ajouté les classes pour vous .

add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['wpse16243_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

Vous pouvez maintenant utiliser cette nouvelle variable globale au lieu du titre normal. Exemple simple:

add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
    if ( isset( $GLOBALS['wpse16243_title'] ) ) {
        return $GLOBALS['wpse16243_title'];
    }
    return $cat_title;
}

Bien sûr, cela ne fonctionne que si vous affichez le menu avant d’afficher le titre. Si vous en avez besoin plus tôt (peut-être dans l'élément <title>?), Vous devriez commencer par rendre le menu, puis l'afficher plus tard .

15
Jan Fabry

Vous pouvez utiliser wp_get_nav_menu_items() . Voici un exemple function:

<?php
function my_get_menu_item_name( $loc ) {
    global $post;

    $locs = get_nav_menu_locations();

    $menu = wp_get_nav_menu_object( $locs[$loc] );

    if($menu) {

        $items = wp_get_nav_menu_items($menu->term_id);

        foreach ($items as $k => $v) {
            // Check if this menu item links to the current page
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}

Ensuite, appelez la function avec le nom du lieu du menu de navigation que vous souhaitez utiliser:

<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'

echo $menu_name;
4
Giraldi
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {

        if ($menu_item->current ) {
            $GLOBALS['currentMenuTitle'] = $menu_item->title;
            $GLOBALS['currentMenuID'] = $menu_item->ID;



            break;
        }
    }


    return $sorted_menu_items;
}


function get_menu_items_children( $menu_item_id='' )
{   
    global $wpdb;

      //     AND meta_key='_menu_item_menu_item_parent'

    $myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );


    foreach ( $myrows as $menu_item ) {

        $sc = get_object_vars($menu_item);  

        $myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );

        foreach ( $myrowsb as $menu_itemb ) {

            $scb = get_object_vars($menu_itemb);    
            $pmIDs[] = $scb['meta_value'];

        }

    }


    return $pmIDs;
}
2
v3nt

Je ne suis pas sûr de bien suivre.

Les "Musées que nous soutenons" sont générés par un titre de publication, un titre de page, un titre de catégorie, etc. (ou, si vous utilisez un menu de navigation personnalisé, il peut s'agir d'un titre personnalisé).

Qu'essayez-vous de faire avec ce texte? Où essayez-vous de l'afficher? Je suppose que vous essayez de l'afficher sur la page d'index des catégories (puisque vous indiquez qu'il s'agit de current-menu-item)? Si tel est le cas, appelez simplement <?php single_cat_title(); ?> pour afficher le titre de la catégorie.

Si vous avez besoin d'informations supplémentaires sur les catégories, vous pouvez utiliser quelque chose comme:

$cat = get_the_category();
$currentcat = $cat[0];

Ce qui rend disponibles les variables suivantes:

$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)

Si vous vous trouvez quelque part autre que la page d'index des catégories, vous devez passer le $ catid à ces fonctions.

MODIFIER:

Puisque vous avez indiqué que "Museums We Support" est un titre de menu personnalisé, l’approche easiest consisterait à renommer la catégorie de "Museums" en "Museums We Support" (note: vous peut laisser le slug, museums, inchangé). Toutefois, cela signifierait que "Museums We Support" (Musées que nous soutenons) serait affiché en tant que titre de catégorie, où que ce soit dans votre modèle. Si cela est acceptable, ne vous inquiétez pas.

Sinon, vous devrez utiliser quelque chose comme wp_get_nav_menu_items() ( Référence du Codex ) pour saisir le titre de l'élément de menu spécifique.

0
Chip Bennett