我有一个WordPress博客,其中的帖子有多个类别被选中。我在每个帖子的底部使用“上一篇文章”和“下一篇文章”按钮。我希望下一篇或上一篇文章属于同一类别 - wordpress允许在next_post_link
和previous_post_link
函数中使用此参数,但是当您有多个类别时它会变得复杂 - 它选择类别ID最低的类别,这会导致后期导航不一致。
我想要做的是从固定链接获取帖子类别,格式为/%category%/%postname%然后获取所有类别的数组,从该数组中删除当前帖子类别,然后排除该数组从下一个和上一个帖子链接,实际上只留下当前类别(由永久链接指示)。例如,如果永久链接是“myurl.com/music/september-guitar-post”,我想从上一个和下一个帖子链接中排除除音乐之外的所有类别。
这是我正在使用的代码(似乎没有按照我想要的方式运行):
function remove_item_by_value($array, $val = '', $preserve_keys = true) {
if (empty($array) || !is_array($array)) return false;
if (!in_array($val, $array)) return $array;
foreach($array as $key => $value) {
if ($value == $val) unset($array[$key]);
}
return ($preserve_keys === true) ? $array : array_values($array);
}
$link = get_permalink();
$link = explode('/',$link);
$currentCat = $link[3];
$currentCat = get_category_by_slug( $currentCat );
$currentCatId = $currentCat->term_id;
$categories = get_categories();
foreach($categories as $category) {
$catList[] = $category->term_id;
}
$exclude = remove_item_by_value($catList, $currentCatId);
$exclude = implode(' and ',$exclude);
previous_post_link('%link', '« Previous post', TRUE, $exclude);
next_post_link('%link', '« Previous post', TRUE, $exclude);
所有代码都有效,直到尝试将$ exclude字符串用作next / prev post链接函数中的参数。进一步测试后,只是尝试排除单个类别似乎不起作用(next_post_link('%link', '« Previous post', TRUE, '3')
)。任何人都可以确认这个代码实际上是如文档所说的那样起作用吗?
我如何使这项工作?
谢谢!
答案 0 :(得分:1)
根据next_page_link
Docs,您需要将排除的类别作为包含由" and "
分隔的ID的字符串传递:
$exclude = implode(' and ', $exclude);
next_post_link('%link', '« Previous post', TRUE, $exclude);
previous_post_link('%link', '« Previous post', TRUE, $exclude);
如果文档没有说谎,这应该可行。
答案 1 :(得分:1)
请注意您输入要排除的类别的所有四个位置。 示例id是id = 10 id = 20 id = 30
//Exclude Categories From Previous/Next
function custom_prev_next_posts() {
global $thesis_design;
if (is_single() && $thesis_design->display['posts']['nav']) {
$previous = get_previous_post(FALSE,'10,20,30');
$next = get_next_post(FALSE,'10,20,30');
$previous_text = apply_filters('thesis_previous_post', __('Previous entry: ', 'thesis')); #filter
$next_text = apply_filters('thesis_next_post', __('Next entry: ', 'thesis')); #filter
if ($previous || $next) {
echo "\t\t\t\t\t<div class=\"prev_next post_nav\">\n";
if ($previous) {
if ($previous && $next)
$add_class = ' class="previous"';
echo "\t\t\t\t\t\t<p$add_class>$previous_text";
previous_post_link('%link', '%title',FALSE,'10,20,30');
echo "</p>\n";
}
if ($next) {
echo "\t\t\t\t\t\t<p>$next_text";
next_post_link('%link', '%title',FALSE,'10,20,30');
echo "</p>\n";
}
echo "\t\t\t\t\t</div>\n";
}
}
}
add_action('wp_hook_after_content', 'custom_prev_next_posts');
remove_action('wp_hook_after_content', 'wp_prev_next_posts');
答案 2 :(得分:0)
从下面的文档中可以看出,exclude参数必须是“1和2和3”形式的字符串(不是数组),其中1,2,3是示例类别ID。看起来您需要从当前尝试用作参数的数组中构建此字符串。
http://codex.wordpress.org/Function_Reference/previous_post_link