親メニューなどをリンク無しに出来ない時の解決方法【ワードプレス】
ワードプレスのメニューって、デフォルトだとリンク無しで追加できないですよね。でも、実際は親メニュー的な感じでリンクの無い項目を表示したい事って多いものです。
たいがいは適当なリンクを記入して、追加してからリンクのURLを消す方法で対処できるのですが、たま~にこの方法ではリンク無しに出来ないケースがあります。テーマのせいなのか、なんなのかわかりませんが、URLを空にしておくと、訳のわからないURLにリンクしてしまったりするケースです。
そこで今回は、追加したメニューのURLを空にしても、メニュー項目がリンク無しになってくれない時の対処方法です。
~ 目次 ~
一般的な方法
この記事のタイトルだと、Wordpress初心者の方も読まれるかもしれませんので、一応ごくごく普通の方法も書いておきます。
前述した内容と若干かぶりますが、ワードプレスのメニュー設定では、URLの欄に何か書いてあれば追加できてしまいます。そこで、”/”とか”#”とか、なんでもいいのでURLの欄に適当に打ち込んで追加してしまいます。追加してからURLの欄の中身を削除するんですね。
たいがいはこれだけの事で済みます。以上で「なぁんだ。もう出来たよ。。」という方は、この先は読む必要はありません。
メニューの設定でURLを空にしてもリンクが消えてくれない場合
前書き部分でも書きましたが、たまにあるんです。メニューのリンクが消えてくれないテーマ(?)が。
メニューの設定画面ではURLが空になっていても、実際にサイトを表示してみると”http://example.com/456”なんて感じで、投稿ページっぽいURLにリンクしてしまいます。しかもクリックしても404エラー。。
きっと何か原因があるのでしょうが、今回はリンクURLを空にしてもリンクが消えてくれない原因については考えません。。時間も無いので、とにかくメニューにリンクしない項目を作成する方法です。
メニューの設定
リンク無しにしたい項目のURL欄には、”none”と入力して下さい。ダブルクォーテーションは要りません。noneだけです。
本当は文言はなんでもいいのですが、使用する可能性のある”/”や”#”だと後で困るかもしれませんので、まず使わなさそうな”none”としました。万一、投稿や固定ページ、もしくはカテゴリーやタクソノミーのスラッグにnoneをお使いでしたら、何でもいいので絶対に使用しないものにして下さい。
link-shinaide-tanomuyoとかでもいいですよ。。
リンクを消すためのコード
次に、下のコードを使用中のテーマのfunctions.phpの最後に貼り付けます。いつも言いますが、最後の行に”?>”と記述されていたら、これはPHPの終了タグです。この行は変更してはいけません。必ず、その前に貼り付けます。
1 2 3 4 5 |
/* メニューにリンク無しの項目を作る */ function no_link_nav_menu($nav_menu,$args){ return str_replace('http://none','javascript:void(0);',$nav_menu); } add_filter('wp_nav_menu','no_link_nav_menu',9999,2); |
「メニューの設定」で、”none”の部分を変更した場合は、こちらのコードも書き換えが必要です。
3行目の”http://none”の部分を、メニューの設定で入力しておいたURLに書き換えて下さい。
例:http://no-link
念のため説明!
上のコードは、仮で入力しておいた”none”というURLを、”javascript:void(0)”に置き換えているだけです。
javascript:void(0)というのは、「このaタグ、クリックしても何もすんなよ!」という事だと思って頂ければ良いかと思います。
そして、関数wp_nav_menu()の一番最後、出力する直前にあるフックがwp_nav_menuです。この時点でメニューの内容はHTMLの整形が終わっています。「あとは出力だけ」という状態の準備ができたメニューを、いったん拝借して書き換えて戻す。という内容になっています。
これで、好きな所でリンク無しの項目が使えるようになったはずです。
最後に
URLを空にするとリンクが変になる原因がわかれば、もう少しナイスな方法もあるかもしれませんね。でもこの状況、たま~にしか出くわさないのでバグかもしれないし調べる気が起きません。。
今回書いた内容は、とても軽~い処理です。これでリンク無しにできますので、これでいいんじゃないかと思います。メニューにリンク無し項目が作れなくてハマっちゃった方は、ぜひやってみて下さい。