web-dev-qa-db-fra.com

qTranslate: Masquer le contenu non traduit

Je sais que qTranslate a la possibilité de masquer le contenu non traduit, mais cela ne semble pas fonctionner. I.e: J'ai un site Web en trois langues: néerlandais, français et anglais. Une page particulière contient des sous-pages uniquement disponibles en néerlandais. Je veux qu'ils apparaissent sur le site Web néerlandais, mais les cachent complètement des sites français et anglais. Ainsi:

  • MenuItem1
  • MenuItem2
    • MenuItem2.1
    • MenuItem2.2
  • MenuItem3

Donc MenuItem2 et ses sous-pages ne sont disponibles qu'en néerlandais. Je les veux cachés sur le site anglais/français.

Est-ce possible avec qTranslate ou un autre plugin? Ou y a-t-il un morceau de code qui permettra cela?

Merci.

2
Matthias

Petit bidouillage dans mon code de sous-menu:

function hierarchical_submenu($post) {
    $top_post = $post;
    // If the post has ancestors, get its ultimate parent and make that the top post
    if ($post->post_parent && $post->ancestors) {
        $top_post = get_post(end($post->ancestors));
    }
    // Always start traversing from the top of the tree
    return hierarchical_submenu_get_children($top_post, $post);
}

function hierarchical_submenu_get_children($post, $current_page) {
    $menu = '';
    // Get all immediate children of this page
    $children = get_pages('child_of=' . $post->ID . '&parent=' . $post->ID . '&sort_column=menu_order&sort_order=ASC');
    if ($children) {
        $menu = "\n<ul>\n";
        foreach ($children as $child) {
            // If the child is the viewed page or one of its ancestors, highlight it
            if (in_array($child->ID, get_post_ancestors($current_page)) || ($child->ID == $current_page->ID)) {
                $menu .= '<li class="active"><a href="' . get_permalink($child) . '" class="first-li active">' . $child->post_title . '</a>';
            } else {
                if (strcmp($child->post_title, " ")) {
                    $menu .= '<li><a href="' . get_permalink($child) . '">' . $child->post_title . '</a>';
                }
            }
            // If the page has children and is the viewed page or one of its ancestors, get its children
            if (get_children($child->ID) && (in_array($child->ID, get_post_ancestors($current_page)) || ($child->ID == $current_page->ID))) {
                $menu .= hierarchical_submenu_get_children($child, $current_page);
            }
            $menu .= "</li>\n";
        }
        $menu .= "</ul>\n";
    }
    return $menu;
}

Ajouté le

if (strcmp($child->post_title, " ")) {
                        $menu .= '<li><a href="' . get_permalink($child) . '">' . $child->post_title . '</a>';
                    }

Si structure ici.

0
Matthias

Cela pourrait aider: http://www.gish.se/wg-qtranslate.Zip - télécharger et installer, puis réparer le plugin en changeant:

foreach($content as $language  => $lang_text) {
         $lang_text = trim($lang_text);
         if(!empty($lang_text)) $languages[] = $language ;
      }

à

foreach($content as $lang  => $lang_text) {
         $lang_text = trim($lang_text);
         if(!empty($lang_text)) $languages[] = $lang ;
      }

extrait de http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=2958 , fonctionne dans la plupart des cas

1
alekwisnia

Je crée un plugin très simple qui permet de masquer des éléments de menu dans certaines langues, mais de les montrer sur d'autres.
Après avoir installé mon plugin et l'avoir activé, il vous suffit de supprimer le titre de la langue non désirée, tout en laissant la chaîne dans les autres.
Par exemple, si vous souhaitez afficher "Profil de la société" uniquement dans le menu anglais, mais pas dans le menu français (ou dans une autre langue), définissez le titre de l'élément de menu sur: "Profil de la société".
Le comportement par défaut de qTranslate vous donnerait l’élément "Company Profile (English)" dans le menu français.
Enjoy: http://www.hoojima.com/wordpress/qtranslate-remove-menu-item.Zip

0
Ronny Sherer

J'ai fait ce qui suit dans le functions.php de mon thème:

if (function_exists('qtrans_getLanguage')):
function mytheme_qt_menu_filter($items) {
    $filtered = array();
    foreach ($items as $item) {
        // TODO Not sure what happens when object_id == ID, which happens if
        //      not linking to post (e.g. external link).
        if (qtrans_isAvailableIn($item->object_id, qtrans_getLanguage()))
            $filtered[] = $item;
    }
    return $filtered;
}
add_filter('wp_get_nav_menu_items', 'na_qt_menu_filter');
endif;

Cela semble fonctionner dans mon cas :)

0
Arild Matsson