私が遭遇した問題について多くのグーグルを通して、私は過去にこの場所が良い情報源であると思いました。私の質問は、WordPressが使用する冗長な書き換え規則に関するものです。
project というカスタム投稿タイプを設定し、 projects というカスタム分類法を登録しました。ほとんどの場合、書き換えルールが原因で、競合することになるので、書き換えスラッグオプションを除いて、すべてがうまく機能します。
基本的にこれは私が達成しようとしている構造です:
example.com/work/%taxonomy%/%post_name%/
(投稿用)example.com/work/%taxonomy%/
(特定の分類用語に属する投稿を一覧表示)example.com/work/
(taxonomy.phpを含むpage-work.phpに移動して、その分類に関連するすべての投稿をリストします)これが私がこれまでに持っているコードですが、これは私が少しつまずいているビットであるので私はWP_Rewriteルールを書くのを手伝う必要があります。
$labels = array(
'name' => _x('Projects', 'post type general name'),
'singular_name' => _x('Project', 'post type singular name'),
'add_new' => _x('Add New', 'project item'),
'add_new_item' => __('Add New Project'),
'edit_item' => __('Edit Project'),
'new_item' => __('New Project'),
'view_item' => __('View Project'),
'search_items' => __('Search Projects'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => true,
'rewrite' => array('slug'=>'work', 'with_front'=>false),
'show_ui' => true,
'_builtin' => false, // It's a custom post type, not built in!
'capability_type' => 'post',
'query_var' => "project", // This goes to the WP_Query schema
'menu_position' => null,
'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);
register_post_type('project' , $args);
// Showcase Taxonomy
register_taxonomy('projects', array('project'), array(
'public' => true,
'hierarchical' => true,
'label' => 'Project Categories',
'singular_label' => 'Project Category',
'query_var' => true,
'rewrite' => array('slug'=>'work', 'with_front'=>false, 'hierarchical'=>true)
)
);
助けてくれて本当にありがとうございます! :-)
私は同じ問題を抱えていました、そして、多くの苦労の後に私はこの解決策に行き着きました。
これをあなたのコードに追加するだけです
global $wp_rewrite;
$wp_rewrite->flush_rules();
function my_custom_post_type() {
$labels = array(
'name' => _x('Projects', 'post type general name'),
'singular_name' => _x('Project', 'post type singular name'),
'add_new' => _x('Add New', 'project item'),
'add_new_item' => __('Add New Project'),
'edit_item' => __('Edit Project'),
'new_item' => __('New Project'),
'view_item' => __('View Project'),
'search_items' => __('Search Projects'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'Projects'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => false,
'has_archive' => true,
'rewrite' => array('slug'=>'work', 'with_front'=>false),
'show_ui' => true,
'_builtin' => false, // It's a custom post type, not built in!
'capability_type' => 'post',
'query_var' => true, // This goes to the WP_Query schema
'menu_position' => null,
'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);
register_post_type( 'work' , $args );
global $wp_rewrite;
$wp_rewrite->flush_rules(); // this should help
}
これがあなたの問題を解決できることを願っています
function my_custom_post_type() {
$labels = array(
'name' => _x('Projects', 'post type general name'),
'singular_name' => _x('Project', 'post type singular name'),
'add_new' => _x('Add New', 'project item'),
'add_new_item' => __('Add New Project'),
'edit_item' => __('Edit Project'),
'new_item' => __('New Project'),
'view_item' => __('View Project'),
'search_items' => __('Search Projects'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'Projects'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => false,
'has_archive' => true,
'rewrite' => array('slug'=>'work', 'with_front'=>false),
'show_ui' => true,
'_builtin' => false, // It's a custom post type, not built in!
'capability_type' => 'post',
'query_var' => true, // This goes to the WP_Query schema
'menu_position' => null,
'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);
register_post_type( 'work' , $args );
}
function my_custom_taxonomies() {
$labels = array(
'name' => __( 'Taxonomy', 'taxonomy general name' ),
'singular_name' => __( 'Taxonomy', 'taxonomy singular name' ),
'search_items' => __( 'Search Taxonomy' ),
'all_items' => __( 'All Taxonomy' ),
'parent_item' => __( 'Parent Taxonomy' ),
'parent_item_colon' => __( 'Parent Taxonomy:' ),
'edit_item' => __( 'Edit Taxonomy' ),
'update_item' => __( 'Update Taxonomy' ),
'add_new_item' => __( 'Add New Taxonomy' ),
'new_item_name' => __( 'New Taxonomy Name' ),
'menu_name' => __( 'Taxonomy' ),
);
register_taxonomy( 'taxonomy', array('work'), array (
'labels' => $labels,
'hierarchical' =>false,
'show_ui' => true,
'rewrite' => array( 'slug' => 'work/taxonomy'),
'query_var' => true,
'show_in_nav_menus' => true,
'public' => true,
));
}
add_action('init', 'my_custom_post_type', 0);
add_action('init', 'my_custom_taxonomies', 10);
あなたが作成する必要があるものはあなたのカスタム分類アーカイブを示すのに使用するarchive-work.php(あなたのポストタイプアーカイブ)とtaxonomy.phpです。
より詳しい説明は 別の投稿に ですが、ここにあなたが追加する必要がある基本的な部分があります:
あなたの分類法とcptを登録しましょう。分類群の書き換えスラグが "basename"で、cptの書き換えスラグが "basename /%tax_name%"であることを確認してください。
Wordpressに次のように "%tax_name%"の処理を指示します。
function filter_post_type_link($link, $post)
{
if ($post->post_type != 'custom_post_type_name')
return $link;
if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
{
$link = str_replace('%taxonomy_name%',array_pop($cats)->term_id, link); // see custom function defined below
}
return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);