前回の記事で「404になる」とか「複数はどうする」とか書きましたが、使い方が分かりました。
■カスタム投稿タイプが1つの場合
(register_post_typeで「faqs」を定義した場合)
http://www.example.jp/faqs/111.htmlにしたい
// functions.php
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=faqs&p=';
$wp_rewrite->add_rewrite_tag('%cpt_id%', '([^/]+)', $queryarg);
$wp_rewrite->add_permastruct('faqs', '/faqs/%cpt_id%.html', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct('faqs');
$newlink = str_replace("%cpt_id%", $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=faqs&p=';
$wp_rewrite->add_rewrite_tag('%cpt_id%', '([^/]+)', $queryarg);
$wp_rewrite->add_permastruct('faqs', '/faqs/%cpt_id%.html', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct('faqs');
$newlink = str_replace("%cpt_id%", $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
以前は「post_id」をrewriteしていましたが、通常投稿のpost_idもrewriteしてしまうので、「cpt_id」としています。
Via:http://wordpress.org/support/topic/custom-post-type-permalink-structure
良く見るとそう書いてある??
■カスタム投稿タイプが複数の場合
(register_post_typeで「faqs」「designs」「products」を定義した場合)
http://www.example.jp/faqs/111.htmlにしたい
http://www.example.jp/designs/222.htmlにしたい
http://www.example.jp/products/333.htmlにしたい
// functions.php
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=designs&p=';
$wp_rewrite->add_rewrite_tag('%designs_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('designs', '/designs/%designs_id%.html', false);
$queryarg = 'post_type=faqs&p=';
$wp_rewrite->add_rewrite_tag('%faqs_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('faqs', '/faqs/%faqs_id%.html', false);
$queryarg = 'post_type=products&p=';
$wp_rewrite->add_rewrite_tag('%products_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('products', '/products/%products_id%.html', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
$newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=designs&p=';
$wp_rewrite->add_rewrite_tag('%designs_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('designs', '/designs/%designs_id%.html', false);
$queryarg = 'post_type=faqs&p=';
$wp_rewrite->add_rewrite_tag('%faqs_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('faqs', '/faqs/%faqs_id%.html', false);
$queryarg = 'post_type=products&p=';
$wp_rewrite->add_rewrite_tag('%products_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('products', '/products/%products_id%.html', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
$newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
「myposttype_rewrite()」でそれぞれの書き換えを指定することでrewriteをスムーズに行っています。
「カスタム投稿タイプ使用時のパーマリンクをPostnameからPost_Idにする(2)」への1件のフィードバック
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)