web-dev-qa-db-fra.com

obtenir l'identifiant du menu en utilisant son nom

J'ai un nom de menu Social Network. Je veux obtenir l'ID de menus. J'ai essayé ce qui suit, mais je n'y suis pas parvenu.

  global $wpdb;
$menu_slug = 'social-network';
$menu_id = $wpdb->get_results(
    "
    SELECT TERM_ID
    FROM $wpdb->wp_terms
    WHERE name = ".$menu_slug."
    "
);
echo $menu_id;
1
Bhuvnesh

Vous pouvez utiliser la fonction get_term_by et utiliser 'name' dans le champ param.

<?php get_term_by( $field, $value, $taxonomy, $output, $filter ) ?> 

Exemple:

$term = get_term_by('name', 'Social Network', 'nav_menu');
$menu_id = $term->term_id;

Voici le lien vers la page du codex: http://codex.wordpress.org/Function_Reference/get_term_by

J'espère que cela t'aides.

6
lucymtc

Tout ce dont vous avez besoin est get_terms()

Écrivons wp_menu_id_by_name( $name )

/**
 * Gets a menu id by name
 * 
 * @param string $name The menu name
 * @return int|boolean The menu id or false if not found
 */
function wp_menu_id_by_name( $name ) {
    $menus = get_terms( 'nav_menu' ); 

    foreach ( $menus as $menu ) {
        if( $name === $menu->name ) {
            return $menu->term_id;
        }
    }
    return false;
}

Utilisons-le

echo 'My Special Menu id is ' . wp_menu_id_by_name( 'My Special menu' );

// Outputs: My Special Menu id is 3
2
Nabil Kadimi

Vous n'utilisez pas le bon code, utilisez plutôt ceci:

global $wpdb;

$tablename = $wpdb->prefix.'terms'; // use always table prefix
$menu_name = 'top-menu'; // menu name
$menu_id = $wpdb->get_results(
    "
    SELECT term_id
    FROM ".$tablename." 
    WHERE name= '".$menu_name."'
    "
);

// results in array 
foreach($menu_id as $menu):
    echo $menu->term_id;
endforeach; 
1
Balas