2

wp_nav_menu() を使用してメニューを作成するワードプレスのテーマがあります。このメニューには、非標準のワードプレス ページに移動するカスタム メニュー項目があります。URL 文字列の一致に基づいて、このナビゲーション アイテムを現在の状態に条件付きで設定する方法はありますか?

ありがとう

4

1 に答える 1

4

Wordpress で nav_menu_css_class を使用して、目的の結果を得ることができます。このフックを使用すると、メニューに適用できる CSS クラスの配列を変更できます。

add_filter( 'nav_menu_css_class', 'add_parent_url_menu_class', 10, 2 );

function add_parent_url_menu_class( $classes = array(), $item = false ) {
    // Get current URL
    $current_url = current_url();
    // Get homepage URL
    $homepage_url = trailingslashit( get_bloginfo( 'url' ) );
    // Exclude 404 and homepage
    if( is_404() or $item->url == $homepage_url ) return $classes;
        if ( strstr( $current_url, $item->url) ) {
            // Add the 'parent_url' class
            $classes[] = 'parent_url';
        }
    return $classes;
}

function current_url() {
    // Protocol
    $url = ( 'on' == $_SERVER['HTTPS'] ) ? 'https://' : 'http://';
    $url .= $_SERVER['SERVER_NAME'];
    // Port
    $url .= ( '80' == $_SERVER['SERVER_PORT'] ) ? '' : ':' . $_SERVER['SERVER_PORT'];
    $url .= $_SERVER['REQUEST_URI'];

    return trailingslashit( $url );
}

このメソッドは、404 ページまたはサイトのルートを無視しますが、現在の URL がメニュー項目の URL と一致する場合、クラスをメニュー項目に追加します。

このコードの完全なクレジット: http://www.rarescosma.com/2010/11/add-a-class-to-wp_nav_menu-items-with-urls-included-in-the-current-url/

于 2012-07-04T13:22:13.857 に答える