神戸市須磨区のホームページ制作/チラシ制作

ワードプレスの動的URLからcategoryをとる方法

今回自身のサイトを制作する際に「制作実績」をブログ機能を使って制作しようと思ったんだけど
イメージとしては一覧表示する際に下記のようにしたい

/works/web

でも実際は

/category/works/web

となってしまう・・・SEO的には問題ないんだろうけど、なんか納得いかない・・

という事で色々調べて解決したのでメモっておく

function.phpを設定

function.phpへ下記コードを追加


// カテゴリー部分をURLから削除するためのフィルター関数
function remcat_function($link) {
    return str_replace("/category/", "/", $link);
}

// フィルターを登録して、リライトルールを更新する
add_filter('user_trailingslashit', 'remcat_function');

// リライトルールを更新するための関数
function remcat_flush_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

// ページ番号を含むURLを処理するリライトルールを追加する関数
function remcat_rewrite($wp_rewrite) {
    // 新しいリライトルールを定義
    $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
    // 既存のリライトルールに新しいルールを追加
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

// リライトルールを変更するためのフィルターを登録
add_filter('generate_rewrite_rules', 'remcat_rewrite');

パーマリンクは下記で設定

/%category%/%post_id%/

無事に理想通りのURLになりました!

他にも

  • プラグインの「WP No Category Base」を使う方法
  • パーマリンクのカテゴリーベースに【 . 】を入れる方法

などあったけど、一番スマートな方法がfunction.phpにコードを追加する方法でした。