web-dev-qa-db-ja.com

qTranslate:未翻訳のコンテンツを隠す

私はqTranslateが未翻訳のコンテンツを隠すオプションを持っていることを知っていますが、それはうまくいかないようです。 I.e:オランダ語、フランス語、英語の3つの言語のWebサイトがあります。オランダ語でしか利用できないサブページがある特定のページが1つあります。私は彼らがオランダのウェブサイトに現れるようにしたいのですが、フランス語と英語のサイトからそれらを完全に隠します。そのようです:

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

だからMenuItem2とそのサブページはオランダ語でしか利用できません。私はそれらを英語/フランス語のウェブサイトに隠して欲しいのです。

これはqTranslateや他のプラグインで可能ですか?それともこれを可能にするコードの一部はありますか?

ありがとう。

2
Matthias

私のサブメニューコードを少しハックします。

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;
}

を追加しました

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

こちらの構造なら。

0
Matthias

http://www.gish.se/wg-qtranslate.Zip - ダウンロードしてインストールしてから、プラグインを修正して変更します。

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 ;
      }

http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=2958 から取得され、ほとんどの場合に動作します

1
alekwisnia

私はいくつかの言語でメニュー項目を隠すことを可能にする非常に単純なプラグインを作成しますが、それらを他の言語で見せます。
私のプラグインをインストールして有効にしたら、不要な言語からタイトルを削除する必要がありますが、それ以外の文字列はそのままにします。
たとえば、英語メニューにのみ表示し、フランス語メニュー(または他の言語)には表示しない場合は、メニュー項目のタイトルを "Company Profile"に設定します。
qTranslateのデフォルトの振る舞いでは、フランス語メニューの項目 "Company Profile(English)"が得られます。
お楽しみください: http://www.hoojima.com/wordpress/qtranslate-remove-menu-item.Zip

0
Ronny Sherer

私は私のテーマのfunctions.phpで以下をしました:

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;

私の場合はうまくいくようです:)

0
Arild Matsson