web-dev-qa-db-ja.com

特定の条件でメニュー項目を隠す

私はプラグインqTranslateを使用しています、そして、言語がイタリア語でないとき、私は1つのメニュー項目を隠さなければなりません。

オンラインで検索この解決策を作成 して 、この投稿に解決策を適用しました

Hide-menu.jsファイルを作成しました。内容は次のとおりです。

 jQuery('a[href*="/it/noleggio-lungo-termine"]').each(function() {
   $("li#menu-item-9452").hide();
});

それから私はfunction.phpの下部にこのコードを追加しました

   function add_my_script() {
    wp_enqueue_script(
        'hide-menu', // name your script so that you can attach other scripts and de-register, etc.
        get_template_directory_uri() . '/js/hide-menu.js', // this is the location of your script file
        array('jquery') // this array lists the scripts upon which your script depends
    );
   }

しかし、この解決策はうまくいきません。

どうすればこの問題を解決できますか?

1
Mma87

実際のコードでは、スクリプトを追加する機能は実行されません。関数add_my_script()は好きな場所に配置できますが、Wordpressイベントにフックする必要があります。この場合に最適なイベントは、 wp_enqueue_scripts です。

add_action('wp_enqueue_scripts', 'add_my_script');
function add_my_script() {
    wp_enqueue_script(
        'hide-menu', // name your script so that you can attach other scripts and de-register, etc.
         get_template_directory_uri() . '/js/hide-menu.js', // this is the location of your script file
         array('jquery') // this array lists the scripts upon which your script depends
    );
}

あなたのJavaScriptコードも間違っています。 jQueryセレクタ によると、部分文字列<a>を含むhref属性を持つすべての/it/noleggio-lungo-termine要素を選択しようとしていますが、言語が指定されている場合、そのような要素はHTMLに存在しませんイタリア語ではありません。次のコードは単にid=menu-item-9452li要素を隠すために機能します。

jQuery("li#menu-item-9452").hide();

jQueryセレクタのドキュメント を読んで、有効なセレクタを使用してください。

特定の言語でその要素を隠すには、現在の言語にアクセスする必要があります。あなたはqTranslateを使っているようです。考えられる解決策:

add_action('wp_enqueue_scripts', 'add_my_script');
function add_my_script() {

    wp_enqueue_script(
        'hide-menu', // name your script so that you can attach other scripts and de-register, etc.
         get_template_directory_uri() . '/js/hide-menu.js', // this is the location of your script file
         array('jquery') // this array lists the scripts upon which your script depends
    );

    $scriptData = array(
         'lang' => qtrans_getLanguage(),
    );
    wp_localize_script('hide-menu','script_data', $scriptData);
}

それからAntはhide-menu.jsで:

if( script_data.lang != 'it' ) {
    jQuery("li#menu-item-9452").hide();
}

また、あなたはCSSによってその項目を隠すことができます。例えば、あなたのテーマのheader.phpでは、このコードを<head></head>の間に置くことができます。

<?php

 if( qtrans_getLanguage() != 'it' ) {

      echo "<style>#menu-item-9452 { display: none; } </style>";

  }

?>
2
cybmeta