WordPress

kategorie – Dodaj kategorię do niestandardowego adresu URL posta

  • 30 grudnia, 2015
  • 3 min read
kategorie – Dodaj kategorię do niestandardowego adresu URL posta


Próbuję utworzyć niestandardowy post z niestandardową taksonomią i kategoriami. Struktura jest taka:

Produkt:

  • Ma kategorie
  • Ma taksonomię

Utwórz niestandardowy typ postu:

function create_alco_custom_post() {
    $review_slug = 'reviews';

    $labels = array( 
        'name' => __( 'Recenzje' ),
        'singular_name' => __( 'Recenzja' ),
        'add_new' => __( 'Nowa recenzja' ),
        'add_new_item' => __( 'Dodaj nową recenzje' ),
        'edit_item' => __( 'Edytuj recenzje' ),
        'new_item' => __( 'Nowa recenzja' ),
        'view_item' => __( 'Zobacz recenzje' ),
        'search_items' => __( 'Szukaj w recenzjach' ),
        'not_found' =>  __( 'Nie znaleziono recenzji' ),
        'not_found_in_trash' => __( 'Nie znaleziono recenzji w koszu' ),
    );
    $args = array(
        'labels' => $labels,
        'menu_icon' => 'dashicons-format-quote',
        'public' => true,
        'has_archive' => true,
    'rewrite' => array('slug' => '%review-category%','with_front' => true),
        'hierarchical'  => true,
        'menu_position' => 0,
        'exclude_from_search' => false,
        'supports' => array(
            'title', 
            'editor',
            'thumbnail'
        ),
        'taxonomies' => array('category')
    );
    register_post_type( 'review', $args );
} 
add_action( 'init', 'create_alco_custom_post' );

Następnie dodaję taksonomię:

$labels = array(
    'name'                          => __( 'Producenci', 'alkowiki' ),
    'singular_name'                 => __( 'Producent', 'alkowiki' ),
    'search_items'                  => __( 'Wyszukaj wśród producentów', 'alkowiki' ),
    'popular_items'                 => __( 'Popularni producenci', 'alkowiki' ),
    'all_items'                     => __( 'Wszystcy producenci', 'alkowiki' ),
    'parent_item'                   => __( 'Producent rodzic', 'alkowiki' ),
    'edit_item'                     => __( 'Edytuj producenta', 'alkowiki' ),
    'update_item'                   => __( 'Aktualizuj producenta', 'alkowiki' ),
    'add_new_item'                  => __( 'Dodaj nowego producenta', 'alkowiki' ),
    'new_item_name'                 => __( 'Nowy producent', 'alkowiki' ),
    'separate_items_with_commas'    => __( 'Oddziel producentów przecinkami', 'alkowiki' ),
    'add_or_remove_items'           => __( 'Dodaj lub usuń producentów', 'alkowiki' ),
    'choose_from_most_used'         => __( 'Wybierz z najczęściej wykorzystywanych producentów', 'alkowiki' )
);

$args = array(
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => true,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'query_var'                     => true
);

register_taxonomy( 'producents', 'review', $args );

I na koniec zmieniam strukturę linków:

add_filter('post_link', 'category_permalink', 1, 3);
add_filter('post_type_link', 'category_permalink', 1, 3);

function category_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, '%review-category%') === FALSE) return $permalink;
        // Get post
        $post = get_post($post_id);
        if (!$post) return $permalink;

        // Get taxonomy terms
        $terms = wp_get_object_terms($post->ID, 'category');
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
            $taxonomy_slug = $terms[0]->slug;
        else $taxonomy_slug = 'nieskateryzowane';

    return str_replace('%review-category%', $taxonomy_slug, $permalink);
}

Moja struktura postów w ustawieniach WP to /%category%/%postname%/

A adresy URL postów są tworzone poprawnie, archiwa kategorii wyświetlają posty poprawnie, permlinki są tworzone tak, jak chciałem, ale kiedy przechodzę do strony produktu (struktura adresu URL witryna/kategoria/nazwa-produktu) otrzymuję 404. Kiedy zamiast tego odwiedzam adres URL z taksonomią kategorii (strona/taksonomia/nazwa-produktu) Jestem przekierowywany do witryny /kategoria/nazwa-produktu, która również kończy się na 404.

Warto przeczytać!  To jest kod wtyczki, który ma dodać znaczek/etykietę przed tytułem posta, ale nie rozumiem, dlaczego pokazuje znaczniki kodu w interfejsie użytkownika

Męczę się z tym od kilku dni, jakieś pomysły?

EDYTOWAĆ:

Niestety musiałem przełączyć permalinki z powrotem na domyślne (%postname%) – chcę, aby domyślne posty WP miały taką strukturę adresu URL. Zmieniłem również domyślną kategorię (która jest powiązana z domyślnymi postami) na niestandardową taksonomię o nazwie „my-category” i zarejestrowałem ją dla mojego niestandardowego typu postu. Więc teraz są 2 taksonomie (takie same jak pierwsza wstawiona). Strony archiwum dla nich dają 404, a strona produktu nadal daje 404. Jak ustawić strukturę przepisywania?

Doprecyzuję co chcę osiągnąć:

  • site.com/%taxonomy1%/ – archiwum niestandardowego postu z tą taksonomią
  • site.com/%taxonomy2%/ – archiwum niestandardowego postu z tą taksonomią
  • site.com/%taxonomy1%/custom-post-name/ – strona z niestandardowym postem (link tylko z pierwszą taksonomią)


Źródło