Php wordpress菜单中的自定义活动菜单项

Php wordpress菜单中的自定义活动菜单项,php,wordpress,Php,Wordpress,我有一个wordpress主题,使用wp_nav_menu()构建菜单。我在这个菜单中有一个自定义菜单项,它指向一个非标准wordpress页面。有没有办法根据url字符串中的匹配条件将此导航项设置为当前导航项 谢谢您可以使用Wordpress中的导航菜单类来实现您想要的结果。使用这个钩子,您可以更改可以应用于菜单的CSS类数组 add_filter( 'nav_menu_css_class', 'add_parent_url_menu_class', 10, 2 ); function ad

我有一个wordpress主题,使用wp_nav_menu()构建菜单。我在这个菜单中有一个自定义菜单项,它指向一个非标准wordpress页面。有没有办法根据url字符串中的匹配条件将此导航项设置为当前导航项


谢谢

您可以使用Wordpress中的导航菜单类来实现您想要的结果。使用这个钩子,您可以更改可以应用于菜单的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匹配,则会将类添加到菜单项


这段代码的全部功劳:

您可以使用Wordpress中的nav_menu_css_类来实现您想要的结果。使用这个钩子,您可以更改可以应用于菜单的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匹配,则会将类添加到菜单项


这段代码的全部功劳:

您可以通过将$current\u url更改为:$current\u url=trailingslashit(get\u site\u url(null,$\u SERVER['REQUEST\u URI'))来完全避免使用current\u url函数;通过将$current\u url更改为:$current\u url=trailingslashit(get\u site\u url(null,$\u SERVER['REQUEST\u URI']),可以完全避免使用current\u url函数;