게시물 유형 "에피소드"와 게시물 유형 "만화 시리즈"사이에 게시물 / 부모 관계를 설정했습니다.
이 코드를 사용하여 메타 상자에 추가하여 다른 게시물 유형의 부모를 할당했습니다.
add_action('admin_menu', function() {
remove_meta_box('pageparentdiv', 'episodes', 'normal');
});
add_action('add_meta_boxes', function() {
add_meta_box('episodes-parent', 'Cartoon Series', 'episodes_attributes_meta_box', 'episodes', 'side', 'default');
});
function episodes_attributes_meta_box($post) {
$post_type_object = get_post_type_object($post->post_type);
if ( $post_type_object->hierarchical ) {
$pages = wp_dropdown_pages(array('post_type' => 'cartoon-series', 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
if ( ! empty($pages) ) {
echo $pages;
} // end empty pages check
} // end hierarchical check.
}
관리 화면에서 에피소드의 부모로 시리즈를 설정할 수 있었지만 게시물을 보려고하면 404가 표시됩니다. URL 구조는 다음과 같습니다.
domain/episodes/series-name/episode-name
시리즈의 URL은 다음과 같습니다.
domain/cartoon-series/series-name
에피소드의 URL을 다음과 같습니다.
domain/cartoon-series/series-name/episode-name
내가 무엇을 놓치고 있습니까? 전체 게시물 유형을 다른 게시물 유형의 하위 항목으로 만들 수 있습니까? 그래서 에피소드 목록의 URL을 얻을 수도 있습니다.
domain/cartoon-series/series-name/episodes
감사! 매트
요청한대로 문제가되는 두 가지 맞춤 게시물 유형에 대한 코드는 다음과 같습니다.
$labels = array(
"name" => "Cartoon Series",
"singular_name" => "Cartoon Series",
"menu_name" => "Cartoon Series",
"all_items" => "All Cartoon Series",
"add_new" => "Add New",
"add_new_item" => "Add New Cartoon Series",
"edit" => "Edit",
"edit_item" => "Edit Cartoon Series",
"new_item" => "New Cartoon Series",
"view" => "View",
"view_item" => "View Cartoon Series",
"search_items" => "Search Cartoon Series",
"not_found" => "No Cartoon Series Found",
"not_found_in_trash" => "No Cartoon Series Found in Trash",
"parent" => "Parent Cartoon Series",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "cartoon-series", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "cartoon-series", $args );
$labels = array(
"name" => "Episodes",
"singular_name" => "Episode",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "episodes", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "episodes", $args );
CPT UI 플러그인을 사용하고 있으므로 해당 코드를 직접 편집 할 수 없습니다. CPT UI가 제공하는 내보내기 코드입니다.
두 CPT를 연결하는 다른 코드가 없습니다. 어쩌면 내가 놓친 것일 수도 있습니다. 방금 링크를 수행하기 위해 메타 박스를 페이지에 배치하는 코드를 온라인에서 발견했습니다. 일을하기에 충분하지 않습니까? post_parent를 설정 한 것 같습니다.
감사! 매트
pre_get_posts
성공하지 않고 쿼리를 변경 하려고 시도했지만 이해하지 못한 더 복잡한 것이 포함되어 있습니다. 고양이를 강아지의 부모로 삼는 것과 같습니다. 하나의 계층 적 게시물 유형 만 사용하거나 메타 필드를 사용하여 영역을 설정하는 것이 좋습니다 .
parent_id
.query var를 사용하며 관계를 설정하기 위해 더 코딩 할 필요가 없습니다. 문제는 생성 된 URL이 WordPress에서 인식되지 않는다는 것입니다. 나는 그것을 작동 시키는 다시 쓰기 규칙 을 찾으려고 노력 했지만 성공하지 못했습니다. 이제 솔루션을 조사하고 있습니다.