Добавление категорий к произвольному типу сообщения в постоянной ссылке
-
-
это может быть глупый вопрос,но вы сбросили свои перезаписи?this may be a silly question, but have you flushed your rewrites?
- 2
- 2012-12-19
- kristina childs
-
В последнее время сталкиваюсь с этой проблемой.** Решено! ** [# 188834] [1] [1]: http://wordpress.stackexchange.com/questions/94817/add-category-base-to-url-in-custom-post-type-taxonomy/188834#188834Recently, I face this issue. **Solved!** [#188834][1] [1]: http://wordpress.stackexchange.com/questions/94817/add-category-base-to-url-in-custom-post-type-taxonomy/188834#188834
- 0
- 2015-05-20
- maheshwaghmare
-
3 ответ
- голосов
-
- 2015-07-26
Я нашел РЕШЕНИЕ !!!
(После бесконечных исследований .. Я могу получить постоянные ссылки CUSTOM POST TYPE ,например:
example.com/category/sub_category/my-post-name
вот код (вfunctions.php или плагине):
//===STEP 1 (affect only these CUSTOM POST TYPES) $GLOBALS['my_post_typesss__MLSS'] = array('my_product1','....'); //===STEP 2 (create desired PERMALINKS) add_filter('post_type_link', 'my_func88888', 6, 4 ); function my_func88888( $post_link, $post, $sdsd){ if (!empty($post->post_type) && in_array($post->post_type, $GLOBALS['my_post_typesss']) ) { $SLUGG = $post->post_name; $post_cats = get_the_category($id); if (!empty($post_cats[0])){ $target_CAT= $post_cats[0]; while(!empty($target_CAT->slug)){ $SLUGG = $target_CAT->slug .'/'.$SLUGG; if (!empty($target_CAT->parent)) {$target_CAT = get_term( $target_CAT->parent, 'category');} else {break;} } $post_link= get_option('home').'/'. urldecode($SLUGG); } } return $post_link; } // STEP 3 (by default, while accessing: "EXAMPLE.COM/category/postname" // WP thinks, that a standard post is requested. So, we are adding CUSTOM POST // TYPE into that query. add_action('pre_get_posts', 'my_func4444', 12); function my_func4444($q){ if ($q->is_main_query() && !is_admin() && $q->is_single){ $q->set( 'post_type', array_merge(array('post'), $GLOBALS['my_post_typesss'] ) ); } return $q; }
I have found a SOLUTION!!!
(After endless research.. I can have CUSTOM POST TYPE permalinks like:
example.com/category/sub_category/my-post-name
here the code (in functions.php or plugin):
//===STEP 1 (affect only these CUSTOM POST TYPES) $GLOBALS['my_post_typesss__MLSS'] = array('my_product1','....'); //===STEP 2 (create desired PERMALINKS) add_filter('post_type_link', 'my_func88888', 6, 4 ); function my_func88888( $post_link, $post, $sdsd){ if (!empty($post->post_type) && in_array($post->post_type, $GLOBALS['my_post_typesss']) ) { $SLUGG = $post->post_name; $post_cats = get_the_category($id); if (!empty($post_cats[0])){ $target_CAT= $post_cats[0]; while(!empty($target_CAT->slug)){ $SLUGG = $target_CAT->slug .'/'.$SLUGG; if (!empty($target_CAT->parent)) {$target_CAT = get_term( $target_CAT->parent, 'category');} else {break;} } $post_link= get_option('home').'/'. urldecode($SLUGG); } } return $post_link; } // STEP 3 (by default, while accessing: "EXAMPLE.COM/category/postname" // WP thinks, that a standard post is requested. So, we are adding CUSTOM POST // TYPE into that query. add_action('pre_get_posts', 'my_func4444', 12); function my_func4444($q){ if ($q->is_main_query() && !is_admin() && $q->is_single){ $q->set( 'post_type', array_merge(array('post'), $GLOBALS['my_post_typesss'] ) ); } return $q; }
-
- 2017-07-20
Есть решение!
Чтобы иметь иерархические постоянные ссылки для пользовательского типа сообщений,установите постоянные ссылки пользовательского типа сообщений ( https://wordpress.org/plugins/custom-post-type-permalinks/) плагин.
Обновите зарегистрированный тип сообщения. У меня есть название типа сообщения в качестве справочного центра
function help_centre_post_type(){ register_post_type('helpcentre', array( 'labels' => array( 'name' => __('Help Center'), 'singular_name' => __('Help Center'), 'all_items' => __('View Posts'), 'add_new' => __('New Post'), 'add_new_item' => __('New Help Center'), 'edit_item' => __('Edit Help Center'), 'view_item' => __('View Help Center'), 'search_items' => __('Search Help Center'), 'no_found' => __('No Help Center Post Found'), 'not_found_in_trash' => __('No Help Center Post in Trash') ), 'public' => true, 'publicly_queryable'=> true, 'show_ui' => true, 'query_var' => true, 'show_in_nav_menus' => false, 'capability_type' => 'page', 'hierarchical' => true, 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/", 'menu_position' => 21, 'supports' => array('title','editor', 'thumbnail'), 'has_archive' => true )); flush_rewrite_rules(); } add_action('init', 'help_centre_post_type');
А вот и зарегистрированная таксономия
function themes_taxonomy() { register_taxonomy( 'help_centre_category', 'helpcentre', array( 'label' => __( 'Categories' ), 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/", 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'query_var' => true ) ); } add_action( 'init', 'themes_taxonomy');
Эта строка заставляет вашу постоянную ссылку работать
"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
вы можете удалить
%post_id%
и оставить/%help_centre_category%/%postname%/"
Не забудьте удалить постоянные ссылки с панели управления.
Got the solution!
To have hierarchical permalinks for custom post type install Custom Post Type Permalinks(https://wordpress.org/plugins/custom-post-type-permalinks/) plugin.
Update registered post type. I have post type name as help center
function help_centre_post_type(){ register_post_type('helpcentre', array( 'labels' => array( 'name' => __('Help Center'), 'singular_name' => __('Help Center'), 'all_items' => __('View Posts'), 'add_new' => __('New Post'), 'add_new_item' => __('New Help Center'), 'edit_item' => __('Edit Help Center'), 'view_item' => __('View Help Center'), 'search_items' => __('Search Help Center'), 'no_found' => __('No Help Center Post Found'), 'not_found_in_trash' => __('No Help Center Post in Trash') ), 'public' => true, 'publicly_queryable'=> true, 'show_ui' => true, 'query_var' => true, 'show_in_nav_menus' => false, 'capability_type' => 'page', 'hierarchical' => true, 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/", 'menu_position' => 21, 'supports' => array('title','editor', 'thumbnail'), 'has_archive' => true )); flush_rewrite_rules(); } add_action('init', 'help_centre_post_type');
And here is registered taxonomy
function themes_taxonomy() { register_taxonomy( 'help_centre_category', 'helpcentre', array( 'label' => __( 'Categories' ), 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/", 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'query_var' => true ) ); } add_action( 'init', 'themes_taxonomy');
This is line makes your permalink work
"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
you can remove
%post_id%
and can keep/%help_centre_category%/%postname%/"
Don't forget to flush permalinks from dashboard.
-
+1 самое простое решение - просто использовать этот плагин: https://wordpress.org/plugins/custom-post-type-permalinks/отлично работает+1 the simplest solution is to just use this plugin: https://wordpress.org/plugins/custom-post-type-permalinks/ works perfectly
- 0
- 2017-08-16
- Jules
-
Да,но это для случаев,когда у вас есть один настраиваемый тип сообщения,но если у вас есть несколько настраиваемых типов сообщений в одной теме,то решение,указанное выше. Более того,он также изменяет ярлык вашей категории так же,как и ярлык типа сообщения.Yes, but that is for if you have single custom post type but if you have multiple custom post type in single theme then above is the solution. Moreover it also changes your category slug same as your post type slug.
- 0
- 2017-08-18
- Varsha Dhadge
-
- 2012-05-30
В вашем коде есть несколько ошибок. Я очистил ваш существующий код:
<?php function jcj_club_post_types() { $labels = array( 'name' => __( 'Jazz Clubs' ), 'singular_name' => __( 'Jazz Club' ), 'add_new' => __( 'Add New' ), 'add_new_item' => __( 'Add New Jazz Club' ), 'edit' => __( 'Edit' ), 'edit_item' => __( 'Edit Jazz Clubs' ), 'new_item' => __( 'New Jazz Club' ), 'view' => __( 'View Jazz Club' ), 'view_item' => __( 'View Jazz Club' ), 'search_items' => __( 'Search Jazz Clubs' ), 'not_found' => __( 'No jazz clubs found' ), 'not_found_in_trash' => __( 'No jazz clubs found in Trash' ), 'parent' => __( 'Parent Jazz Club' ), ); $args = array( 'public' => true, 'show_ui' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'menu_position' => 5, 'query_var' => true, 'supports' => array( 'title','editor','comments','revisions','trackbacks','author','excerpt','thumbnail','custom-fields' ), 'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ), 'has_archive' => true ); register_post_type( 'jcj_club', $args ); } add_action( 'init','jcj_club_post_types' ); ?>
Замените свой код приведенным выше и посмотрите,работает ли он. Ответьте,если у вас возникнут дополнительные вопросы,и я постараюсь помочь.
РЕДАКТИРОВАТЬ:
Я заметил,что пропустил
'has_archive' => true
.You have several errors with your code. I cleaned up your existing code:
<?php function jcj_club_post_types() { $labels = array( 'name' => __( 'Jazz Clubs' ), 'singular_name' => __( 'Jazz Club' ), 'add_new' => __( 'Add New' ), 'add_new_item' => __( 'Add New Jazz Club' ), 'edit' => __( 'Edit' ), 'edit_item' => __( 'Edit Jazz Clubs' ), 'new_item' => __( 'New Jazz Club' ), 'view' => __( 'View Jazz Club' ), 'view_item' => __( 'View Jazz Club' ), 'search_items' => __( 'Search Jazz Clubs' ), 'not_found' => __( 'No jazz clubs found' ), 'not_found_in_trash' => __( 'No jazz clubs found in Trash' ), 'parent' => __( 'Parent Jazz Club' ), ); $args = array( 'public' => true, 'show_ui' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'menu_position' => 5, 'query_var' => true, 'supports' => array( 'title','editor','comments','revisions','trackbacks','author','excerpt','thumbnail','custom-fields' ), 'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ), 'has_archive' => true ); register_post_type( 'jcj_club', $args ); } add_action( 'init','jcj_club_post_types' ); ?>
Replace your code with the code above and see if it works. Reply back if you have further questions and I'll try to help.
EDIT:
I noticed I left out
'has_archive' => true
.
Я знаю,что люди спрашивали об этом раньше и дошли до того,что добавили пользовательский тип сообщения и переписали его для постоянной ссылки.
Проблема в том,что у меня есть 340 категорий,которые я хотел бы продолжить. Раньше я мог видеть/category/subcategory/postname
Теперь у меня есть ярлык customposttype/postname. Выбор категории больше не отображается в постоянной ссылке ... Я не менял настройку постоянной ссылки в админке на что-то другое.
Что-то мне не хватает или нужно добавить в этот код?