WordPress

Niestandardowa paginacja punktów końcowych taksonomii za pomocą paginate_links()

  • 20 czerwca, 2017
  • 3 min read
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.

Warto przeczytać!  WordPress 6.5 Beta 3 – Wiadomości WordPress

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.

Warto przeczytać!  zapytanie - automatyczna aktualizacja Metabox lub jakikolwiek inny pomysł na rozwiązanie tego problemu


Źródło