カスタム投稿タイプ/分類法のURLにカテゴリベースを追加する
-
-
最近、私はこの問題に直面しています.**解決しました!** [#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
-
**解決策!**(無限の調査の後)
`post_type_link`フィルターを変更する必要があります.詳細:http://wordpress.stackexchange.com/a/167992/33667)**SOLUTION!** (After endless research)
you should modify the `post_type_link` filter. more at: http://wordpress.stackexchange.com/a/167992/33667 )- 0
- 2015-07-26
- T.Todua
-
[カスタム投稿タイプとその分類法のパーマリンク構造を変更する方法](http://wordpress.stackexchange.com/questions/28979/how-to-change-permalink-structure-for-custom-post-type)の重複の可能性-and-its-taxonomies)possible duplicate of [How to change permalink structure for custom post type and it's taxonomies?](http://wordpress.stackexchange.com/questions/28979/how-to-change-permalink-structure-for-custom-post-type-and-its-taxonomies)
- 0
- 2015-07-26
- T.Todua
-
9 回答
- 投票
-
- 2013-04-06
書き換えを変更して、コースクエリ変数を追加します:
'rewrite' => array('slug' => 'courses/%course%')
次に、
post_type_link
をフィルタリングして、選択したコースをパーマリンクに挿入します.function wpa_course_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) ){ $terms = wp_get_object_terms( $post->ID, 'course' ); if( $terms ){ return str_replace( '%course%' , $terms[0]->slug , $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
これを実行できる
カスタム投稿タイプのパーマリンクのようなプラグインもあります. Change your rewrite to add the course query var:
'rewrite' => array('slug' => 'courses/%course%')
Then filter
post_type_link
to insert the selected course into the permalink:function wpa_course_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) ){ $terms = wp_get_object_terms( $post->ID, 'course' ); if( $terms ){ return str_replace( '%course%' , $terms[0]->slug , $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
There are also plugins like Custom Post Type Permalinks that can do this for you.
-
ありがとう、私はあなたの迅速な答えに感謝します.これは完全に理にかなっています.興味がありますが、フィルターpost_type_linkはどこに挿入しますか?ドキュメント全体の一番下に移動できますか?Thank you, I appreciate your swift answer. This makes complete sense. I'm curious though, where do I insert the filter post_type_link at? can i just go at the bottom of the entire document?
- 0
- 2013-04-06
- Zach Russell
-
私はそれを一番下に追加しました、そしてそれは404のページです.I added it to the bottom and it 404's the page.
- 0
- 2013-04-06
- Zach Russell
-
書き換えをフラッシュする必要があります.パーマリンク設定ページにアクセスしてください.you have to flush rewrites, visit the permalinks settings page.
- 1
- 2013-04-06
- Milo
-
また、同じスラッグを共有する分類法と投稿タイプとの衝突が発生する可能性があることにも注意してください.also note you'll likely have a clash with a taxonomy and a post type both sharing the same slug.
- 0
- 2013-04-06
- Milo
-
私が今いるところは、パーマリンクを正しく作成しているのですが、正しく実行されていません(ソフト404です).これを正しく機能させるために何ができるかについての推奨事項はありますか?私はパーマリンクフラッシュの書き換えから離れています.「保存」をクリックするだけでファイルが更新されます(nginxなので、nginx.confファイルで制御されます)Where i'm at now is it's making the permalinks right, but it's not executing correctly (it's soft 404ing). Any recommendations on what I can do to get this working right? I'm away of the permalink flush rewrites. Just click 'save' and it updates the file (it's nginx so it's controlled in the nginx.conf file)
- 0
- 2013-04-06
- Zach Russell
-
とった!それは対立でした.Got it! It was a conflict.
- 0
- 2013-04-06
- Zach Russell
-
反対票-アーカイブページ404Downvote - archive page 404
- 1
- 2020-04-04
- Dev
-
これは、多言語サイト(WPMLを使用するなど)の翻訳された投稿では機能しません.This doesn't work for translated posts on a multilingual site (for example using WPML).
- 0
- 2020-08-05
- montrealist
-
これは、新しく作成されたURLのフロントページを示しています.@Florisの回答にあるadd_rewrite_rule()を使用して機能させる必要があります.また、アーカイブページが機能しなくなり、/my-post-typeと/my-post-type/my-categoryに対して404が返されることに注意してください.This shows frontpage for me on the newly created URL. You gotta use the add_rewrite_rule() seen in @Floris's answer to make it work. Also note, archive pages stop working, I get 404 for /my-post-type and for /my-post-type/my-category
- 0
- 2020-09-01
- trainoasis
-
- 2019-02-11
私にとっての解決策は3つの部分でした.私の場合、投稿タイプは
trainings
と呼ばれます.-
'rewrite' => array('slug' => 'trainings/%cat%')
からregister_post_type
関数へ. - スラグを動的カテゴリに変更します.
- 新しい動的URLを「リッスン」し、適切なテンプレートをロードします.
これが、特定の投稿タイプのパーマリンクを動的に変更する方法です.
functions.php
に追加:function vx_soon_training_post_link( $post_link, $id = 0 ) { $post = get_post( $id ); if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, 'training_cat' ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'vx_soon_training_post_link', 1, 3 );
...これは、新しい動的URLに適切なテンプレートをロードする方法です.
functions.php
に追加:function archive_rewrite_rules() { add_rewrite_rule( '^training/(.*)/(.*)/?$', 'index.php?post_type=trainings&name=$matches[2]', 'top' ); //flush_rewrite_rules(); // use only once } add_action( 'init', 'archive_rewrite_rules' );
以上です!パーマリンクをバックエンドに再度保存して、パーマリンクを更新することを忘れないでください.または、
flush_rewrite_rules()
関数を使用します.The solution for me had three parts. In my case the post type is called
trainings
.- Add
'rewrite' => array('slug' => 'trainings/%cat%')
to theregister_post_type
function. - Change the slug to have a dynamic category.
- "Listen" to the new dynamic URL and load the appropriate template.
So here is how to change the permalink dynamically for a given post type. Add to
functions.php
:function vx_soon_training_post_link( $post_link, $id = 0 ) { $post = get_post( $id ); if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, 'training_cat' ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'vx_soon_training_post_link', 1, 3 );
...and this is how to load the appropriate template on the new dynamic URL. Add to
functions.php
:function archive_rewrite_rules() { add_rewrite_rule( '^training/(.*)/(.*)/?$', 'index.php?post_type=trainings&name=$matches[2]', 'top' ); //flush_rewrite_rules(); // use only once } add_action( 'init', 'archive_rewrite_rules' );
Thats it! Remember to refresh the permalinks by saving the permalinks again in de backend. Or use the
flush_rewrite_rules()
function. -
- 2017-10-06
解決策を見つけました!
カスタム投稿タイプの階層パーマリンクをインストールするには、カスタム投稿タイプのパーマリンク( 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.
-
- 2015-05-20
うん!多くの調査の結果、プラグインを入手しました 'カスタムパーマリンク '.これは私の要件を満たしています-カスタムURL例:
- カテゴリの場合
- 投稿用
- カスタム投稿の場合
- カスタム分類法の場合 など
このようなカスタム投稿タイプ-投稿:
Yep! After a lot of research I got plugin 'Custom Permalinks'. Which fulfils my requirement regards - custom URL e.g.
- for Category
- for Post
- for Custom Post
- for Custom Taxonomy etc.
Like this Custom Post Type - Post:
-
- 2019-06-12
register_post_type関数を使用してカスタム投稿タイプを登録した行の下の行を更新する必要があります.
'rewrite'=> array( 'slug'=> 'courses/%cat%')
投稿タイプのパーマリンクを動的に変更するには、functions.phpファイルに以下のコードを追加する必要があります:
function change_link( $post_link, $id = 0 ) { $post = get_post( $id ); if( $post->post_type == 'courses' ) { if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, array('course') ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } } return $post_link ; } add_filter( 'post_type_link', 'change_link', 1, 3 ); //load the template on the new generated URL otherwise you will get 404's the page function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); } add_action( 'init', 'generated_rewrite_rules' );
その後、リライトパーマリンクをフラッシュする必要があります. wp-admin>設定>パーマリンクに移動します. [変更を保存]ボタンを使用してパーマリンク設定を更新するだけです.
以下のようなURLが返されます:
- domain.com/courses/[course-name{category}]/lesson-name
ありがとうございます!
You need to update below line at where you have register a custom post type using register_post_type function.
'rewrite' => array('slug' => 'courses/%cat%')
To change permalink dynamically of post type you have to add below code in functions.php file :
function change_link( $post_link, $id = 0 ) { $post = get_post( $id ); if( $post->post_type == 'courses' ) { if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, array('course') ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } } return $post_link ; } add_filter( 'post_type_link', 'change_link', 1, 3 ); //load the template on the new generated URL otherwise you will get 404's the page function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); } add_action( 'init', 'generated_rewrite_rules' );
After that, you need to flush rewrites permalinks, goto the wp-admin > Settings > permalinks. just update permalink setting using "Save Changes" button.
it'll return urls like below :
- domain.com/courses/[course-name{category}]/lesson-name
Thank you!
-
反対票-単一のCPTおよびCTPアーカイブページタイプの両方で404Down vote - 404 on both single CPT and CTP archive page types
- 0
- 2020-04-04
- Dev
-
@devあなたは私が私の答えで述べたすべてのステップに従いましたか?リライトパーマリンクをフラッシュしましたか?私はテストしました、そしてそれはうまく働いています.@dev did you follow all steps which i have mentioned in my answer ? did you flush your rewrite permalinks? I have tested and it is working fine.
- 0
- 2020-04-04
- Chetan Vaghela
-
- 2017-05-03
これは私のために働いています:
'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false, 'hierarchical' => true // to display category/subcategroy ),
This is worked for me :
'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false, 'hierarchical' => true // to display category/subcategroy ),
-
これは、カテゴリまたはそのパスを使用せず、カスタム投稿タイプを階層化するだけです.This does not make use of the categories or their path it only makes the custom post type hierarchical.
- 5
- 2017-08-25
- Joris Kroos
-
- 2019-07-01
このソリューションに興味のある人は、生のPHPコードをいじくり回さなくても、プラグインを強くお勧めします Permalink Manager Lite by MaciejBis.それは命の恩人です.
「permastructs」に基づいて、カスタム投稿タイプのURLで必要な部分を削除または追加する視覚的なメカニズムがあります.
(カスタム投稿タイプを使用した単純なURL構造化に伴うすべての苦痛で、WPをあきらめて別のCMSに移行しようとしていました.しかし、このプラグインをACFおよびCPTUIまたはポッドと組み合わせることでWordpressはかなりプロフェッショナルになります.)
To anyone interested in the solution, without having to tinker with raw PHP code, I highly recommend the plugin Permalink Manager Lite by Maciej Bis. It's a life saver.
It has a visual mechanism to remove or add whatever part you want in the custom post type's URL based on 'permastructs':
(With all the pain involved in simple URL structuring with custom post types, we were about to give up on WP and move to another CMS. But this plugin in conjunction with ACF and CPTUI or Pods makes Wordpress fairly professional.)
-
- 2020-05-29
get_post_type_archive_link()
を使用している場合は、/%cat%/
フィルターを使用してURLからpost_type_archive_link
を削除する必要があります..If you're using
get_post_type_archive_link()
, maybe you will need to remove/%cat%/
from the URL usingpost_type_archive_link
filter. -
- 2020-08-18
@ chetan-vaghelaの答えはほぼ完璧だと思いました.私のユースケースでは、一般的なアーカイブページのように、この投稿タイプごとにすべての投稿のリストを表示できるようにしたかったのです(つまり、/courses/、その後に分類法はありません).次のように、書き換えルールを1つ追加する必要がありました.
function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); }
I found @chetan-vaghela 's answer almost perfect; in my use case I also wanted to be able to see a list of all posts by this post type like a typical archive page (i.e. /courses/, without any taxonomy after it). I just had to add one additional rewrite rule as follows:
function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); }
WordPressで
カスタム投稿タイプ
によって制御されるLMSタイプのシステムを構築しています.投稿タイプは
レッスン
(コース
のスラッグ付き)と呼ばれ、コースと呼ばれる1つの
カスタム分類法
(カテゴリ)があります.コード>.ドメインのURL構造は現在次のように表示されます:
domain.com/courses/lesson-name
.次のようになりたい:
domain.com/courses/[course-name {category}]/lesson-name
または本質的に:
/[cpt]/%category%/%postname%/
これが私が書いたプラグインで、現在
CPT
を制御しています.