web-dev-qa-db-ja.com

カスタムページネーション用のかわいいURL

標準のページ区切りのように、URLにクエリ文字列を追加するのではなく、かわいいURLを使用したいカスタムページ区切りのカスタムクエリがあります。

www.example.com/posttype/pagename/cpage/2

の代わりに

www.example.com/posttype/pagename/?cpage=2

Paginate_links()のformatパラメータを使用することで、かわいいURLを簡単に作成できます。

$args = array(
    'format'    => 'cpage/%#%',
    'current'   => $cpage,
    'total'     => $custom_query->max_num_pages,
    'type'      => 'array',
    'prev_text' => __('Previous'),
    'next_text' => __('Next'),
);
$paging = paginate_links( $args );

私が抱えている問題は、ページが訪問されたときにそれらのURLをクエリ文字列に書き換える必要があることです。なぜならWPはかわいいURL内の 'cpage'変数を認識しないからです。

だから私はこのように.htaccessでURLを書き換えます

RewriteRule ^/posttype/([^/]*)/cpage/([0-9]*) /posttype/$1/?cpage=$2 [QSA]

そして私はこの規則が http://martinmelin.se/rewrite-rule-tester/ を使うことを期待する方法を書き直すべきであることを確かめました。私のサイトの.htaccessにルールを適用するときはしかしながら、ページネーションリンクを訪問するとき404私は得ます、そして、なぜそれが理解できません。私がかわいいURLを使わなければ、ページングは​​うまく機能します。

私はこれまでmod_rewriteを何度も使用しましたが、WPでは使用しませんでした。私がやろうとしていることに影響を与える可能性があることを私が知っておくべきことがありますか、またはこれを達成するためのより良い方法はありますか?

ツールセットタイププラグインを使用した投稿タイプ登録Post type registration using Toolset Types plugin 

get_post_type_object

WP_Post_Type Object
(
    [name] => deal
    [label] => Deals
    [labels] => stdClass Object
        (
            [name] => Deals
            [singular_name] => Deal
            [add_new] => Add New
            [add_new_item] => Add New Deal
            [edit_item] => Edit Deal
            [new_item] => New Deal
            [view_item] => View Deal
            [search_items] => Search Deals
            [not_found] => No Deals found
            [not_found_in_trash] => No Deals found in Trash
            [parent_item_colon] => Parent text
            [all_items] => All items
            [archives] => All items
            [insert_into_item] => Insert into post
            [uploaded_to_this_item] => Uploaded to this post
            [featured_image] => Featured Image
            [set_featured_image] => Set featured image
            [remove_featured_image] => Remove featured image
            [use_featured_image] => Use as featured image
            [filter_items_list] => Filter posts list
            [items_list_navigation] => Posts list navigation
            [items_list] => Posts list
            [menu_name] => Deals
            [enter_title_here] => Enter title here
            [name_admin_bar] => Deal
        )

    [description] => The link between compare and operator
    [hierarchical] => 
    [exclude_from_search] => 1
    [publicly_queryable] => 1
    [show_ui] => 1
    [show_in_menu] => 1
    [show_in_nav_menus] => 1
    [show_in_admin_bar] => 1
    [menu_position] => 
    [menu_icon] => dashicons-admin-post
    [capability_type] => post
    [map_meta_cap] => 1
    [register_meta_box_cb] => 
    [taxonomies] => Array
        (
        )

    [has_archive] => 
    [query_var] => deal
    [can_export] => 1
    [delete_with_user] => 
    [_builtin] => 
    [_edit_link] => post.php?post=%d
    [cap] => stdClass Object
        (
            [edit_post] => edit_post
            [read_post] => read_post
            [delete_post] => delete_post
            [edit_posts] => edit_posts
            [edit_others_posts] => edit_others_posts
            [publish_posts] => publish_posts
            [read_private_posts] => read_private_posts
            [read] => read
            [delete_posts] => delete_posts
            [delete_private_posts] => delete_private_posts
            [delete_published_posts] => delete_published_posts
            [delete_others_posts] => delete_others_posts
            [edit_private_posts] => edit_private_posts
            [edit_published_posts] => edit_published_posts
            [create_posts] => edit_posts
        )

    [rewrite] => Array
        (
            [enabled] => 1
            [with_front] => 1
            [pages] => 1
            [feeds] => 
            [slug] => deal
            [ep_mask] => 1
        )

    [_toolset_edit_last] => 1482798189
    [_wpcf_author_id] => 1
    [wpcf-post-type] => deal
    [icon] => admin-post
    [slug] => deal
    [dashboard_glance] => 1
    [custom-field-group] => Array
        (
            [5] => 1
        )

    [has_archive_slug] => 
    [show_in_menu_page] => 
    [query_var_enabled] => 1
    [permalink_epmask] => 1
    [rest_base] => deal
    [post_relationship] => Array
        (
            [belongs] => Array
                (
                    [compare] => 1
                    [operator] => 1
                )

        )

    [show_in_rest] => 
)

アナライザプラグインの出力を書き換えるenter image description here 

1
gpcola

WordPressの内部書き換えシステムで、 書き換えエンドポイントを追加する :でこれを処理できます。

function wpd_cpage_endpoint() {
    add_rewrite_endpoint( 'cpage', EP_PERMALINK );
}
add_action( 'init', 'wpd_cpage_endpoint' );

これにより、パーマリンクの最後に/cpage/n/を有効にする書き換え規則が追加されます。

それからget_query_var( 'cpage' )を使ってそれらのリクエストの値を取得することができます。

編集 -

これは私が投稿タイプとエンドポイントを登録するために使用したコードです:

function wpd_test_post_type() {

    $args = array(
        'label' => 'Test Type',
        'public' => true,
        'rewrite' => true,
        'supports' => array( 'title' ),
    );

    register_post_type(
        'test_type',
        $args
    );

    add_rewrite_endpoint( 'cpage', EP_PERMALINK );

}
add_action( 'init','wpd_test_post_type' );
0
Milo