🔗
WordPressのパーマリンクをカスタム構造(post_type/category/post_name)にする
このテーマの記事は無限にあるはずなのに、ほとんど手元の環境で動作させることができなかった。
通常投稿タイプの書き換え(不可)
色々と試しましたができませんでした。
明確な理由はわからないけど、この記事が詳しそう。
「No Category Base(EOL済)」とか後述の「Custom Post Type Permalinks」とかプラグインもあるんだけど、どちらも通常投稿には効果が無かった。というか中身一緒だった。
そういうことで、カスタム投稿タイプ以外で個人的に対応できる方法が無い。
カスタム投稿タイプの書き換え
カスタム投稿タイプの追加
今回はプラグイン「CPT UI」を使用して投稿タイプを追加した。
「has_archive」はTrue、「rewrite_withfront」はFalseにする。
Custom Post Type Permalinksを使用してパーマリンクを書き換える
これしないと記事ページのリンクが切れます。
コード見たら色々よしなにしてくれていたので、入れておくのが吉。
プラグインを有効化して、管理画面のパーマリンク設定から、「/%taxonomy_name%/%postname%/」を入力する。
チェックは2つとも入れてみた。
さらにリンクを書き換える
// カスタム投稿のアーカイブリンクを書き換え
function custom_post_type_permalinks_set($termlink, $term, $taxonomy)
{
if($taxonomy === 'cat-works' && $taxonomy === 'cat-news') {
return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
return $termlink;
}
add_filter('term_link', 'custom_post_type_permalinks_set', 11, 3);
// ページネーションなどを繋げる(プラグインだけだとページネーションが動かない)
add_rewrite_rule('works/([^/]+)/page/([0-9]+)/?$','index.php?cat-works=$matches[1]&paged=$matches[2]','top');
add_rewrite_rule('works/([^/]+)/?$', 'index.php?cat-works=$matches[1]', 'top');
add_rewrite_rule('news/([^/]+)/page/([0-9]+)/?$','index.php?cat-news=$matches[1]&paged=$matches[2]','top');
add_rewrite_rule('news/([^/]+)/?$', 'index.php?cat-news=$matches[1]', 'top');
// タクソノミーアーカイブのテンプレートを変える(必要であれば)
function filter_taxonomy_template( $template ) {
if ( is_taxonomy('cat-works') && !is_taxonomy('cat-news') ) { // 上書きするのに否定条件が必要だった
$new_template = locate_template( array( 'archive-works.php' ) );
return $new_template;
} else if(is_taxonomy('cat-news')) {
$new_template = locate_template( array( 'archive-news.php' ) );
return $new_template;
}
return $template;
}
add_filter( 'taxonomy_template', 'filter_taxonomy_template', 99 );
標準投稿を非表示にする
// 標準投稿をメニューから非表示
function remove_menus () {
global $menu;
remove_menu_page( 'edit.php' );
}
add_action('admin_menu', 'remove_menus');
function remove_admin_bars($wp_admin_bar) {
$wp_admin_bar->remove_menu('new-content');
}
add_action('admin_bar_menu','remove_admin_bars',999);
Discussion