WordPressでSEOに理想的なディレクトリ構造とパンくずリストを作ってみる
連載:WordPressの理想的なURL構造を目指す

2.WordPressで実現するときの問題点

WordPressではタクソノミー名が邪魔!

GOOGLEとユーザーに理想的なURL構造とその理由」で触れたように、ムダのないツリー型のURL構造は、検索エンジンにもユーザーにとってもページの内容・サイトの構造をわかりやすくする重要な項目です。
その為、今回はWordPressで
http://bookof.com/book/technical/pc/web/css/487311232X/
の様なURL構造を目指すことにします。

上記のURLを例えばWordPressで作成しようとした時、流れとしては下記のような形が考えられます。

  1. http://bookof.com/ というドメインにWordPressを入れる。
  2. bookというカスタム投稿タイプを作る
  3. typeというタクソノミーを作る
  4. technical>WEB>CSS等のタームを作成し、親子関係を付けてツリー構造にしていく
  5. パーマリンクを調整する

しかし、御存知の通りWordPressで上記の様に作成していくと、URLは例えば下記の様になります。
http://bookof.com/type/css/

「Custom Post Type Permalinks」プラグインを使用すれば、
http://bookof.com/post_type/taxonomy/term
の形までは再現できますが、タクソノミーが含まれてしまい、
http://bookof.com/post_type/taxonomy/
に表示させる内容がありません。パンくずリストともズレが出て来ます。

この状態は「GOOGLEとユーザーに理想的なURL構造とその理由」で触れた理想のURL構造とは違いますので、修正する必要があります。

この状態を修正するためには、WordPressのリライトルール(Rewrite Rules)を変更すれば対応可能です。

リライトルール(Rewrite Rules)とは?

WordPressにはリライトルール(Rewrite Rules)というものがあります。
リライトルール(Rewrite Rules)とは、そのままですがURLを書き直すルールです…
wordpressのリライトルール(Rewrite Rules)
つまり、通常WordPressルートディレクトリにはwp-contentwp-includeswp-adminのディレクトリがあり、直接アクセスするのはindex.phpですが、
静的サイトのディレクトリ構造の様に見せかけたりしたいので何とかしましょうよっていう仕組みですね。

リライトルールはDBに保存されており、rewrite_rules_array等のフックで追加・削除をすることが出来ます。

今回の理想のURLを実現するには、下記のようなリライトルールを追加すれば良いので、次のページでrewrite_rules_arrayフィルターに命令を引っ掛けて追加する具体的なコードを書いてみましょう。
rewrite_rules_arrayフックでリライトルールを追加する


Fatal error: Uncaught Error: Call to undefined function ereg() in /home/kurubusi3500/www/kurubusi/wp-content/themes/kurubusi_bootstrap_sass_01/inc/kurubusi_custom.php:553 Stack trace: #0 /home/kurubusi3500/www/kurubusi/wp-includes/shortcodes.php(319): shortcode_first_img(Array, '', 'first_img') #1 [internal function]: do_shortcode_tag(Array) #2 /home/kurubusi3500/www/kurubusi/wp-includes/shortcodes.php(197): preg_replace_callback('/\\[(\\[?)(id_url...', 'do_shortcode_ta...', '<section class=...') #3 /home/kurubusi3500/www/kurubusi/wp-includes/class-wp-hook.php(286): do_shortcode('<section class=...') #4 /home/kurubusi3500/www/kurubusi/wp-includes/plugin.php(203): WP_Hook->apply_filters('<section class=...', Array) #5 /home/kurubusi3500/www/kurubusi/wp-content/plugins/advanced-custom-fields-pro/fields/wysiwyg.php(450): apply_filters('acf_the_content', '<section class=...') #6 /home/kurubusi3500/www/kurubusi/wp-includes/class-wp-hook.php(286): acf_field_wysiwyg->format_value('<section class=...', 'serialization_8...', Array in /home/kurubusi3500/www/kurubusi/wp-content/themes/kurubusi_bootstrap_sass_01/inc/kurubusi_custom.php on line 553