У меня есть блог на WordPress, где посты имеют несколько категорий. Я использую кнопки «Предыдущая запись» и «Следующая запись» внизу каждого сообщения. Я хотел бы, чтобы следующий или предыдущий пост был в той же категории - WordPress допускает этот параметр в функциях next_post_link
и previous_post_link
, однако это усложняется, когда у вас более одной категории - он выбирает категорию с помощью самый низкий идентификатор категории, что приводит к непоследовательности пост-навигации.
Что я хочу сделать, так это получить категорию поста из постоянной ссылки, которая отформатирована как /% 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_post_link('%link', '« Previous post', TRUE, '3')
), например. Кто-нибудь может подтвердить, что этот код действительно функционирует так, как написано в документации?
Как мне сделать эту работу?
Спасибо!