Niestandardowa paginacja punktów końcowych taksonomii za pomocą paginate_links()
Musisz zarejestrować typ postu i dwie taksonomie dla niego:
/**
* Register product custom post type and taxonomies
*/
function wp_qhywe2x_register_product_custom_post_type() {
register_post_type( 'product', array(
'label' => __( 'Product', 'text-domain' ),
'labels' => array(
'name' => __( 'Products', 'text-domain' ),
'singular_name' => __( 'Product', 'text-domain' ),
'menu_name' => __( 'Products', 'text-domain' ),
'name_admin_bar' => __( 'Products', 'text-domain' ),
'new_item' => __( 'New Product', 'text-domain' ),
'edit_item' => __( 'Edit Product', 'text-domain' ),
'view_item' => __( 'View Product', 'text-domain' ),
'all_items' => __( 'All Products', 'text-domain' ),
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'product' ),
'supports' => array( 'title', 'editor', 'thumbnail' ),
'menu_icon' => 'dashicons-cart',
) );
register_taxonomy( 'product_category', array( 'product' ), array(
'hierarchical' => true,
'labels' => array(
'name' => __( 'Product Categories', 'text-domain' ),
'singular_name' => __( 'Product Category', 'text-domain' ),
),
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'product-category' ),
) );
register_taxonomy( 'product_tag', array( 'product' ), array(
'hierarchical' => false,
'labels' => array(
'name' => __( 'Product Tags', 'text-domain' ),
'singular_name' => __( 'Product Tag', 'text-domain' ),
),
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'product-tag' ),
) );
}
add_action( 'init', 'wp_qhywe2x_register_product_custom_post_type' );
w moim przykładzie product
typ postu, a do tego a product_category
i product_tag
typ postu.
Niezbędne ustawienia są już wykonane z parametrem rewrite slug register_taxonomy()
args, żadna inna funkcja nie wymaga osobnych ustawień.
Następnie potrzebujesz reguły przepisywania, aby jednocześnie obsługiwać kategorię i tag:
/**
* Product category and tag rewrite rules
*
* @param $wp_rewrite
*/
function wp_qhywe2x_product_category_and_tag_rewrite_rules( $wp_rewrite ) {
$category_rewrite_rules = array();
$product_obj = get_post_type_object( 'product' );
$product_category = get_taxonomy( 'product_category' );
$product_tag = get_taxonomy( 'product_tag' );
/** product category and tag rewrite rule */
$category_rewrite_rules[ $product_obj->rewrite['slug'] . " . $product_category->rewrite['slug'] . '/([^/]*)/' . $product_tag->rewrite['slug'] . '/([^/]*)$' ] = 'index.php?post_type=" . $product_obj->name . "&' . $product_category->query_var . '=$matches[1]' . '&' . $product_tag->query_var . '=$matches[2]';
/** pagination rewrite rule - page/1 to ?paged=1 */
$category_rewrite_rules[ $product_obj->rewrite['slug'] . " . $product_category->rewrite['slug'] . '/([^/]*)/' . $product_tag->rewrite['slug'] . '/([^/]*)/page/([^/]*)$' ] = 'index.php?post_type=" . $product_obj->name . "&' . $product_category->query_var . '=$matches[1]' . '&' . $product_tag->query_var . '=$matches[2]&paged=$matches[3]';
/** add to wp rewrite rules */
$wp_rewrite->rules = $category_rewrite_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'wp_qhywe2x_product_category_and_tag_rewrite_rules' );
Ta funkcja wykorzystuje tzw $product_category->rewrite['slug']
i $product_tag->rewrite['slug']
które zostały ustawione w register_taxonomy()
funkcjonować.
Użyj następującej struktury adresu URL dla strony archiwum:
Spowoduje to wyświetlenie wszystkich produktów, które mają „podłącz„kategoria i”Wspaniały„znacznik.
Jeśli użyjesz the_posts_pagination()
Lub paginate_links()
na stronie archiwum, doskonale wyświetli paginację, nie są wymagane żadne dodatkowe ustawienia.