我正在为一个网络喜剧网站工作,我有一个为喜剧页面设置的自定义帖子类型。我在网站上有多个系列,并将每个漫画页面制作成一个家长的子帖子(每个系列有一个家长),以保持其组织性,并为URL提供一些结构。我现在要做的是在每个漫画页面上添加下一个和上一个按钮,以便读者可以轻松地在它们之间移动。我目前有两个独立但相关的问题。
1. 漫画页面使用相同的名称和URL格式,仅由其父页面分隔。例如,LCC系列的第一页如下所示:
http://localhost/wordpress/comics/lcc/v01-001/
而HTA系列的第一页是这样的:
http://localhost/wordpress/comics/hta/v01-001/
Wordpress允许在URL/slug级别执行此操作,但在尝试使用next和previous post函数时会产生问题。首先创建的父级(在本例中为LCC)的子级具有优先权,在LCC中来回移动时,这一点非常有效。然而,如果我从HTA转到一个页面,并尝试在其中前后移动,它会立即将我踢到带有适当段塞但在LCC中的页面(因此,例如,在HTA/v01-001上单击“下一步”应指向HTA/v01-002,而不是指向LCC/v01-002-单击“上一步”,然后指向LCC/v01-001)。
我找到了一些解决方案,可以取消下一个/上一个post函数,并通过增加post ID来实现,但这对我不起作用,因为我已将其设置为按菜单顺序分页,我已将其更改为按字母顺序(我希望这一切都独立于post ID号)。以下是我使用的代码:
/* === Reorder Comic Page Pagination Alphabetically === */
function filter_next_post_sort($sort) {
global $post;
if (get_post_type($post) == \'comic-page\') {
$sort = "ORDER BY p.post_title ASC LIMIT 1";
}
else{
$sort = "ORDER BY p.post_date ASC LIMIT 1";
}
return $sort;
}
function filter_next_post_where($where) {
global $post, $wpdb;
if (get_post_type($post) == \'comic-page\') {
return $wpdb->prepare("WHERE p.post_title > \'%s\' AND p.post_type = \'". get_post_type($post)."\' AND p.post_status = \'publish\'",$post->post_title);
}
else{
return $wpdb->prepare( "WHERE p.post_date > \'%s\' AND p.post_type = \'". get_post_type($post)."\' AND p.post_status = \'publish\'", $post->post_date);
}
}
function filter_previous_post_sort($sort) {
global $post;
if (get_post_type($post) == \'comic-page\') {
$sort = "ORDER BY p.post_title DESC LIMIT 1";
}
else{
$sort = "ORDER BY p.post_date DESC LIMIT 1";
}
return $sort;
}
function filter_previous_post_where($where) {
global $post, $wpdb;
if (get_post_type($post) == \'comic-page\') {
return $wpdb->prepare("WHERE p.post_title < \'%s\' AND p.post_type = \'". get_post_type($post)."\' AND p.post_status = \'publish\'",$post->post_title);
}
else{
return $wpdb->prepare( "WHERE p.post_date < \'%s\' AND p.post_type = \'". get_post_type($post)."\' AND p.post_status = \'publish\'", $post->post_date);
}
}
add_filter(\'get_next_post_sort\', \'filter_next_post_sort\');
add_filter(\'get_next_post_where\', \'filter_next_post_where\');
add_filter(\'get_previous_post_sort\', \'filter_previous_post_sort\');
add_filter(\'get_previous_post_where\', \'filter_previous_post_where\');
和我的自定义邮政编码:
/* === Comic Page === */
function post_type_comic_page() {
// Labels
$labels = array(
\'name\' => \'Comic Pages\',
\'singular_name\' => \'Comic Page\',
\'add_new\' => \'Add New Comic Page\',
\'add_new_item\' => \'Add Comic Page\',
\'all_items\' => \'All Comic Pages\',
\'edit_item\' => \'Edit Comic Page\',
\'not_found\' => \'No Comic Pages Found\',
\'not_found_in_trash\' => \'No Comic Pages Found in Trash\',
);
// Arguments
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'menu_icon\' => \'dashicons-book-alt\',
\'hierarchical\' => true,
\'exclude_from_search\' => false,
\'has_archive\' => true,
\'publicly_queryable\' => true,
\'rewrite\' => array( \'slug\' => \'comics\', \'with_front\' => false ),
\'supports\' => array(
\'page-attributes\', \'title\', \'editor\', \'something-else\',
),
);
// Register Comic Pages Post Type
register_post_type(\'comic-page\', $args);
}
add_action(\'init\', \'post_type_comic_page\');
2. 当我解决这个问题时,我需要能够将前向和后向导航限制为仅限于同一父项下的同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级。因此,在到达LCC的最后一页时,不应转到HTA的第一页,反之亦然。
对于所有这些,我的回退选项是只使用一系列分类法(我之前已经设置并使用过),但我正试图消除尽可能多的不必要代码和检查每个漫画页面所需的东西。我可以在没有分类法的情况下做任何我需要做的事情,所以如果有可能在孩子/父母关系上做到这一点,请帮助我!