カスタム投稿タイプ使用時のパーマリンクをPostnameからPost_Idにする(2)

前回の記事で「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;
}

以前は「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;
}

「myposttype_rewrite()」でそれぞれの書き換えを指定することでrewriteをスムーズに行っています。

「カスタム投稿タイプ使用時のパーマリンクをPostnameからPost_Idにする(2)」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)