Buduję system typu LMS w WordPress, kontrolowany przez Custom Post types
.
Typ postu jest wywoływany Lessons
(z informacją courses
) i ma jeden custom taxonomy
(kategoria) o nazwie courses
.
Struktura adresu URL domeny pokazuje się teraz jako:
domain.com/courses/lesson-name
.
Chcę, żeby stało się:
domain.com/courses/[course-name{category}]/lesson-name
lub zasadniczo:
/[cpt]/%category%/%postname%/
oto wtyczka, którą napisałem, która kontroluje CPTs
teraz.
function rflms_post_type() {
$labels = array(
'name' => _x( 'Lessons', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Lesson', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Lessons', 'text_domain' ),
'parent_item_colon' => __( 'Parent Product:', 'text_domain' ),
'all_items' => __( 'All Lessons', 'text_domain' ),
'view_item' => __( 'View Lesson', 'text_domain' ),
'add_new_item' => __( 'Add New Lesson', 'text_domain' ),
'add_new' => __( 'New Lesson', 'text_domain' ),
'edit_item' => __( 'Edit Lesson', 'text_domain' ),
'update_item' => __( 'Update Lesson', 'text_domain' ),
'search_items' => __( 'Search Lessions', 'text_domain' ),
'not_found' => __( 'No Lessons Found', 'text_domain' ),
'not_found_in_trash' => __( 'No Lessons Found in Trash', 'text_domain' ),
);
$args = array(
'label' => __( 'Lessons', 'text_domain' ),
'description' => __( 'Referable Lessons', 'text_domain' ),
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'supports' => array('premise-member-access', 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
'menu_position' => 5,
'menu_icon' => null,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
'rewrite' => array('slug' => 'courses'),
);
register_post_type( 'lessons', $args );
// Hook into the 'init' action
}
add_action( 'init', 'rflms_post_type', 0 );
// Register Custom Taxonomy
function custom_taxonomy() {
$labels = array(
'name' => _x( 'Courses', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Course', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Courses', 'text_domain' ),
'all_items' => __( 'All Courses', 'text_domain' ),
'parent_item' => __( 'Parent Course', 'text_domain' ),
'parent_item_colon' => __( 'Parent Course:', 'text_domain' ),
'new_item_name' => __( 'New Course Name', 'text_domain' ),
'add_new_item' => __( 'Add New Course', 'text_domain' ),
'edit_item' => __( 'Edit Course', 'text_domain' ),
'update_item' => __( 'Update Course', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate Courses with commas', 'text_domain' ),
'search_items' => __( 'Search Courses', 'text_domain' ),
'add_or_remove_items' => __( 'Add or Remove Courses', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from Most Used courses', 'text_domain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => false,
'rewrite' => array('slug' => 'courses'),
);
register_taxonomy( 'course', 'lessons', $args );
}
// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );
custom-post-types
custom-taxonomy
Zach Russell
źródło
źródło
post_type_link
filtr. więcej na: wordpress.stackexchange.com/a/167992/33667 )Odpowiedzi:
Zmień przepisywanie, aby dodać zapytanie o kurs var:
Następnie przefiltruj,
post_type_link
aby wstawić wybrany kurs do bezpośredniego łącza:Istnieją również wtyczki, takie jak Niestandardowe łącza typu Post, które mogą to zrobić za Ciebie.
źródło
Tak! Po wielu badaniach dostałem wtyczkę „ Custom Permalinks ” . Który spełnia moje wymagania dotyczące - niestandardowy adres URL np
Jak ten niestandardowy typ postu - Post :
źródło
Mam rozwiązanie!
Aby mieć hierarchiczne łącza bezpośrednie dla niestandardowego typu postu, zainstaluj wtyczkę Niestandardowe łącza bezpośrednie typu ( https://wordpress.org/plugins/custom-post-type-permalinks/ ).
Zaktualizuj zarejestrowany typ postu. Mam nazwę typu posta jako centrum pomocy
I tutaj jest zarejestrowana taksonomia
Ta linia sprawia, że twój link bezpośredni działa
możesz usunąć
%post_id%
i zachować/%help_centre_category%/%postname%/"
Nie zapomnij opróżnić permalinków z deski rozdzielczej.
źródło
Rozwiązanie miało dla mnie trzy części. W moim przypadku nazywany jest typ postu
trainings
.'rewrite' => array('slug' => 'trainings/%cat%')
doregister_post_type
funkcji.Oto, jak dynamicznie zmienić bezpośredni link dla danego typu posta. Dodaj do
functions.php
:... i oto jak załadować odpowiedni szablon do nowego dynamicznego adresu URL. Dodaj do
functions.php
:To jest to! Pamiętaj, aby odświeżyć permalinki, zapisując je ponownie w de backend. Lub użyj
flush_rewrite_rules()
funkcji.źródło
Musisz zaktualizować poniższy wiersz, w którym zarejestrowałeś niestandardowy typ postu za pomocą funkcji register_post_type.
'rewrite' => array ('slug' => 'kursów /% cat%')
Aby dynamicznie zmienić bezpośredni link typu postu, musisz dodać poniższy kod w pliku functions.php:
Następnie musisz opróżnić przepisz łącza bezpośrednie, przejdź do wp-admin> Ustawienia> permalinki . po prostu zaktualizuj ustawienie bezpośredniego łącza za pomocą przycisku „Zapisz zmiany”.
zwróci adresy URL jak poniżej:
Dziękuję Ci!
źródło
To działa dla mnie:
źródło
Wszystkim zainteresowanym rozwiązaniem, bez konieczności majstrowania przy surowym kodzie PHP, gorąco polecam wtyczkę Permalink Manager Lite autorstwa Macieja Bisa. To ratownik życia.
Ma wizualny mechanizm do usuwania lub dodawania dowolnej części adresu URL niestandardowego typu postu na podstawie „permastruct”:
(Przy całym bólu związanym z prostą strukturą adresów URL z niestandardowymi typami postów, mieliśmy zamiar zrezygnować z WP i przejść do innego CMS. Ale ta wtyczka w połączeniu z ACF i CPTUI lub Pods sprawia, że Wordpress jest dość profesjonalny.)
źródło