WordPressのURLの構造を標準以外に加工する方法

  • 投稿 : 2016-01-16

プラグン導入でできるもの

固定ページに「.html」や「.php」の拡張子を付ける

WordPress › .html on PAGES « WordPress Plugins

プラグインを導入するだけで、固定ページに.htmlとつきます。
.htmや.phpにしたいばあいは、プラグインのソースを書き換える必要があります。ただし、ソースは短いので見ればだいたいわかります。

カテゴリ、ページなどの末尾に「/」をつける

WordPress › Nice Trailingslashit « WordPress Plugins

これもプラグインの中身は短いので、必要に応じて変更すればよいかと思います。

カテゴリのURLから「/category/」を省く

WordPress › WP No Category Base - WPML compatible « WordPress Plugins

参考:【WordPress】URLから「category」という文字を削除するプラグインは、どれを選べばよいか?

タグのURLから「/tag/」を省く

WordPress › WP-No-Tag-Base « WordPress Plugins

自前でコードを書く方法

地雷を踏みやすいので、自信のない人はやらないほうが良いです。

add_filter( 'post_link', 'remove_parent_cats_from_link', 10, 3 );
function remove_parent_cats_from_link( $permalink, $post, $leavename )
{
    $cats = get_the_category( $post->ID );
    if ( $cats ) {
        // Make sure we use the same start cat as the permalink generator
        usort( $cats, '_usort_terms_by_ID' ); // order by ID
        $category = $cats[0]->slug;
        if ( $parent = $cats[0]->parent ) {
            // If there are parent categories, collect them and replace them in the link
            $parentcats = get_category_parents( $parent, false, '/', true );
            // str_replace() is not the best solution if you can have duplicates:
            // myexamplesite.com/luxemburg/luxemburg/ will be stripped down to myexamplesite.com/
            // But if you don't expect that, it should work
            $permalink = str_replace( $parentcats, '', $permalink );
        }
    }
    return $permalink;
}
Filtering categories in the permalink structure - WordPress Development Stack Exchange

たとえば、post_linkをフックして、無理やり書き換えてしまう方法ですね。

その他の情報

パーマリンク設定で、3階層目までに %post_id% が含まれていた場合、年月アーカイブには、date が入るようになっています。これは、年月アーカイブと投稿のURLが競合してしまう可能性を除外するためのものです。
WordPress › フォーラム » urlに「date」が入ってしまう

スポンサーリンク