Навигация по одноуровневым страницам Wordpress с использованием functions.php

Я пытаюсь найти способ пройти через одноуровневые страницы на моем сайте, размещенном на WordPress. После небольшого поиска я нашел это для включения в свои функции. php:

function siblings($link) {
global $post;
$siblings = get_pages('child_of='.$post->post_parent.'&parent='.$post->post_parent);
foreach ($siblings as $key=>$sibling){
    if ($post->ID == $sibling->ID){
        $ID = $key;
    }
}
$closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));

if ($link == 'before' || $link == 'after') { echo $closest[$link]; } else { return $closest; } }

Это почти идеально для того, что мне нужно. Единственные проблемы:

  1. Он сортирует их по алфавиту, и мне нужно, чтобы они отсортировались по номеру заказа.
  2. Мне нужно, чтобы он зацикливался (чтобы последние страницы ссылались на первую), а не просто заканчивались
  3. Он автоматически говорит «Предыдущий из следующего», и я хотел бы избавиться от этого «из».

Если у кого-то есть информация по любому из трех вопросов, я был бы очень признателен. Я сам немного повозился, но я подумал, что большинство из вас, вероятно, разбирается в этом намного лучше, чем я. Это, и я получил "500 ошибок сервера" слишком много раз.

Спасибо


person Rigel Turdiu    schedule 27.01.2013    source источник


Ответы (1)


Вот ваш измененный фрагмент кода. Он решает ваши первые два запроса. Последний не является частью предоставленного кода. Этот код не генерирует ни одно из упомянутых слов. Он только повторяет или возвращает постоянные ссылки.

function siblings($link) {
global $post;
$siblings = get_pages('child_of='.$post->post_parent.'&parent='.$post->post_parent.'&sort_column=menu_order');
foreach ($siblings as $key=>$sibling){
    if ($post->ID == $sibling->ID){
        $ID = $key;
    }    
}

if( $ID == 0 ){
    $closest = array('before'=>get_permalink($siblings[count($siblings)-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));  
}elseif( $ID == count($siblings)-1 ){
    $closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[0]->ID));
}else{
    $closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));   
}

if ($link == 'before' || $link == 'after') { echo $closest[$link]; } else { return $closest; } }

EDIT: добавлен &sort_column=menu_order в аргументы get_pages для решения первого запроса.

person david.binda    schedule 27.01.2013
comment
Огромное спасибо. Это решило только вторую, а не первую. Он по-прежнему упорядочивает их в алфавитном порядке. В любом случае, спасибо. - person Rigel Turdiu; 27.01.2013
comment
Великолепно! Большое спасибо. Любая идея, где мне, возможно, придется искать, чтобы изменить бит, о котором я говорил? Если нет, ничего страшного, вы уже оказали замечательную помощь. - person Rigel Turdiu; 28.01.2013
comment
Должна быть в той части вашего файла шаблона, где вы вызываете функцию siblings()... - person david.binda; 28.01.2013
comment
Отметить мой ответ как правильный ответ было бы неплохо, заранее спасибо. - person david.binda; 30.01.2013