Saya sedang membangun sistem tipe LMS di WordPress, dikendalikan oleh Custom Post types
.
Jenis posting disebut Lessons
(dengan siput courses
) dan memiliki satu custom taxonomy
(kategori) yang disebut courses
.
Struktur url domain ditampilkan sekarang sebagai:
domain.com/courses/lesson-name
.
Saya ingin menjadi:
domain.com/courses/[course-name{category}]/lesson-name
atau pada dasarnya:
/[cpt]/%category%/%postname%/
di sini adalah plugin yang saya tulis yang mengendalikan CPTs
sekarang.
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
sumber
sumber
post_type_link
filter. lebih lanjut di: wordpress.stackexchange.com/a/167992/33667 )Jawaban:
Ubah penulisan ulang Anda untuk menambahkan kueri kursus var:
Kemudian filter
post_type_link
untuk menyisipkan kursus yang dipilih ke permalink:Ada juga plugin seperti Permalink Jenis Posting Kustom yang dapat melakukan ini untuk Anda.
sumber
Ya! Setelah banyak penelitian saya mendapat plugin ' Custom Permalinks ' . Yang memenuhi persyaratan saya, misalnya URL khusus
Suka Jenis Posting Kustom ini - Posting :
sumber
Dapatkan solusinya!
Untuk memiliki permalink hierarkis untuk jenis posting kustom, pasang Permalink Jenis Posting Kustom ( https://wordpress.org/plugins/custom-post-type-permalinks/ ) plugin.
Perbarui jenis posting terdaftar. Saya memiliki nama jenis posting sebagai pusat bantuan
Dan di sini adalah taksonomi terdaftar
Baris ini membuat permalink Anda berfungsi
Anda dapat menghapus
%post_id%
dan menyimpannya/%help_centre_category%/%postname%/"
Jangan lupa untuk membersihkan permalink dari dasbor.
sumber
Solusi bagi saya memiliki tiga bagian. Dalam kasus saya, jenis posting disebut
trainings
.'rewrite' => array('slug' => 'trainings/%cat%')
keregister_post_type
fungsi.Jadi di sini adalah cara mengubah permalink secara dinamis untuk jenis posting yang diberikan. Tambahkan ke
functions.php
:... dan ini adalah cara memuat templat yang sesuai pada URL dinamis baru. Tambahkan ke
functions.php
:Itu dia! Ingatlah untuk menyegarkan permalink dengan menyimpan permalink lagi di de backend. Atau gunakan
flush_rewrite_rules()
fungsinya.sumber
Anda perlu memperbarui baris di bawah ini di mana Anda telah mendaftarkan jenis posting khusus menggunakan fungsi register_post_type.
'rewrite' => array ('slug' => 'course /% cat%')
Untuk mengubah permalink secara dinamis dari jenis posting Anda harus menambahkan kode di bawah ini dalam file functions.php:
Setelah itu, Anda perlu membilas ulang permalink, buka wp-admin> Pengaturan> permalink . perbarui pengaturan permalink menggunakan tombol "Simpan Perubahan".
itu akan mengembalikan url seperti di bawah ini:
Terima kasih!
sumber
Ini bekerja untuk saya:
sumber
Bagi siapa pun yang tertarik dengan solusinya, tanpa harus mengutak-atik kode PHP mentah, saya sangat merekomendasikan plugin Permalink Manager Lite oleh Maciej Bis. Itu adalah penyelamat hidup.
Ini memiliki mekanisme visual untuk menghapus atau menambahkan bagian apa pun yang Anda inginkan di URL jenis pos khusus berdasarkan 'permastructs':
(Dengan semua rasa sakit yang terlibat dalam penataan URL sederhana dengan jenis posting khusus, kami hampir menyerah pada WP dan pindah ke CMS lain. Tetapi plugin ini bersama dengan ACF dan CPTUI atau Pods membuat Wordpress menjadi cukup profesional.)
sumber