Support » Plugin: Polylang » Can Polylang filter WP Admin bar too?

  • Resolved miguelcortereal


    More specifically the link from WP admin bar ‘site-name’ de one that now with WP 3.8 displays the house icon and allows the access to dashboard if in frontend or visit the site if in backend.

    Visit the site link should be redirecting to backend language home page instead default language home page.

Viewing 6 replies - 1 through 6 (of 6 total)
  • I’ve figured out a way to make wp toolbar home link point to home page in the correct language.

    I’m using default language without language slug.

    What I did was paste at child theme functions.php the whole function defined at wp core that adds this particular menu and sub menu items to wp toolbar and apply some changes.

    home_url('/') was replaced by variable $home_url which assumes the correct value according the language.

    function change_wp_admin_bar_site_menu( $wp_admin_bar ) {
            // Don't show for logged out users.
            if ( ! is_user_logged_in() )
            // Show only when the user is a member of this site, or they're a super admin.
            if ( ! is_user_member_of_blog() && ! is_super_admin() )
            $blogname = get_bloginfo('name');
            if ( empty( $blogname ) )
                    $blogname = preg_replace( '#^(https?://)?(www.)?#', '', get_home_url() );
            if ( is_network_admin() ) {
                    $blogname = sprintf( __('Network Admin: %s'), esc_html( get_current_site()->site_name ) );
            } elseif ( is_user_admin() ) {
                    $blogname = sprintf( __('Global Dashboard: %s'), esc_html( get_current_site()->site_name ) );
            $title = wp_html_excerpt( $blogname, 40, '…' );
            // Set the correct language for home link
            	global $wp_admin_bar, $polylang;
            	$locale = get_locale();
    			$language = $polylang->model->get_language($locale);
    			$home_url = get_term_link($language->slug, 'language');
    			if ( $home_url == home_url().'/en/') {
    				$home_url = home_url();
            $wp_admin_bar->add_menu( array(
                    'id'    => 'site-name',
                    'title' => $title,
                    'href'  => is_admin() ? $home_url : admin_url(),
            ) );
            // Create submenu items.
            if ( is_admin() ) {
                    // Add an option to visit the site.
                    $wp_admin_bar->add_menu( array(
                            'parent' => 'site-name',
                            'id'     => 'view-site',
                            'title'  => __( 'Visit Site' ),
                            'href'   => $home_url,
                    ) );
                    if ( is_blog_admin() && is_multisite() && current_user_can( 'manage_sites' ) ) {
                            $wp_admin_bar->add_menu( array(
                                    'parent' => 'site-name',
                                    'id'     => 'edit-site',
                                    'title'  => __( 'Edit Site' ),
                                    'href'   => network_admin_url( 'site-info.php?id=' . get_current_blog_id() ),
                            ) );
            } else {
                    // We're on the front end, link to the Dashboard.
                    $wp_admin_bar->add_menu( array(
                            'parent' => 'site-name',
                            'id'     => 'dashboard',
                            'title'  => __( 'Dashboard' ),
                            'href'   => admin_url(),
                    ) );
                    // Add the appearance submenu items.
                    wp_admin_bar_appearance_menu( $wp_admin_bar );
    add_action('wp_before_admin_bar_render', 'change_wp_admin_bar_site_menu');
    Plugin Author Chouby


    Great. Thanks for sharing. That may help other users interested in this feature.

    Hello miguelcortereal,

    I think you can help us to resolve our request.
    here is the topic:

    Thanks in advance
    Best regards,

    By default WP logo image uses home_url() which Polylang filters to get the right language.

    Does your theme gives the option on settings to use a different URL, or your logo was coded manually into the header?

    You need to know first where and how is the logo being handled.


    Thanks for your reply.

    My theme give me the possibilty to insert URL via my backoffice, but only one input – one url.

    (I saw that I can add and I do that to test, to add inputs for another URL via another file php but I need to manage it in the header.php file. But I think it’s not important although it would have been nice)

    Of course I have the header.php file with the code to manage the link on the logo but I tried several lines code and it’s note working as I want.

    The original code for the link on the logo, in the header.php:

    $output='<a href="'.TLThemeHelper::esc_attr(TLThemeOption::getOption('header_logo_link_url')).'" title="'.TLThemeHelper::esc_attr(TLThemeOption::getOption('header_logo_alternate_text')).'">'.$output.'</a>';

    and I tried to replace these lines with this line:
    $output='<a href="'.home_url('/').'"title="'.TLThemeHelper::esc_attr(TLThemeOption::getOption('header_logo_alternate_text')).'">'.$output.'</a>';

    But with this line the link doesn’t change.

    and I tried this also:
    $output='<a href="localhost/mywebsite" title="'.TLThemeHelper::esc_attr(TLThemeOption::getOption('header_logo_alternate_text')).'">'.$output.'</a>';

    With this line, the url change according the language BUT I have another problem – I have 2 time localhost/mywebsite.
    ie: for the default I have localhost/mywebsite and for english language for exemple I get this localhost/mywebsite/en/localhost/mywebsite

    But with this line, the url stand with the default url and it’s not change according the language.

    I hope your understand.



    Ok I’m sorry but the backticks don’t working with the other code

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Can Polylang filter WP Admin bar too?’ is closed to new replies.