Тематичні публікації - як використовувати номери та наступні / попередні посилання?


17

Я хочу, щоб на wp_link_pages (повідомлення на сторінках mutli) відображалися номери сторінок, слово "попереднє" перед цими номерами та "наступне" після цих номерів. Це виглядатиме так:

Попередня 1, 2, 3, 4 Далі

Я намагаюся зробити це без плагіна. Ось що я спробував поки що, але це не працює, це лише показ цифр.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

Відповіді:


12

Функція, яку ви використовуєте, wp_link_pagesCodex , не має функції, яку ви шукаєте за замовчуванням.

Однак ви можете легко розширити його за допомогою функції зворотного виклику, зареєстрованої як фільтр аргументів для цих функцій:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Потім фільтр буде змінювати параметри, які використовуються в цій функції на ходу, і вводить відсутні лінки до prevта nextаргументів, які виводяться в лівій і правій частині нумерованого списку посилань ( next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Використання:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

Якщо ваша тема завжди використовує попередні та наступні посилання, то ви можете трохи змінити функцію, щоб зробити її поведінкою за замовчуванням, коли використовується number(за замовчуванням), тому вам потрібно писати менше у своїх темах.

Це дещо інша реалізація, як запропонував Velvet Blues .


За винятком кількох коментарів та раннього повернення, реалізація, назва опції та пояснення точно такі ж, як і у мене. Я щось переглядаю? Яку користь дає ваше рішення? Спасибі.
Оксамитовий блюз

Можливо, коли я порівнюю код.
хакре

Рішення Хакре доступне до тих пір, поки питання тут. Повні відповіді (= зрозуміло, не покладаючись на зовнішні джерела) завжди бажані в StackExchange.
фуксія

6

wp_link_pages()Функція показує тільки або текст або число, ніколи не обидва. Якщо ви подивитеся на код функції, ви побачите, що немає можливості змусити його поводитись інакше, передаючи параметри.

Однак, є три способи зробити це без плагіна:

  1. Створіть власну функцію у файлі function.php теми. Працює, але тоді ви мали б нову функцію.
  2. Використовуйте 2-3 екземпляри wp_link_pages(). Дуже неефективний злом.
  3. Використовуйте фільтр. Кращий спосіб . Дивіться нижче.

Я написав статтю про те, як це зробити у своєму блозі. В основному я використовую фільтр wp_link_pages_args і додаю функцію у файл function.php, яка додає нову опцію "next_and_number".

WordPress Hack: номер відображення та наступні / попередні посилання з wp_link_pages ()


Класна людина ... Я думав про щось, використовуючи 4 глобальних цінності, але ніколи насправді не зводився до рішення ... +1!
Rutwick Gangurde

3

Спробуйте це, ви можете його більше налаштувати. Але це слід робити так, як ви хотіли :-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}

як ми можемо керувати? wordpress.org/support/topic/… або як додати динамічний замовний заголовок перед номером сторінки.
ravi patel

1

Я не розумію, в чому проблема ... Чи є у вас помилка?

Це має працювати:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

Вам не потрібно додавати next_or_number, оскільки число вже є за замовчуванням.


Чомусь це не працює, але мені це здається правильним. Цікаво, чи відбулася зміна на 3.3 чи мені потрібно щось вставити у function.php?
AndrettiMilas

2
Так , я спробував це занадто, це працює , коли ви встановите next_or_numberна next. Але він показує лише посилання "Наступний" та "Попередній", а не цифри!
Рутвік Гангурде

1
Мені потрібно обоє, як показано в прикладі.
AndrettiMilas

1

Цей код знаходиться у циклі публікацій? Кодування для мене нормально. Ось приклад Codex щодо використання:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>

Цей код не працює.
AndrettiMilas

Код виправлено. Вибачте. Деякі атрибути не мають значення.
Caio Alves

1
Це не досягає результатів, які я шукав у своєму питанні, він просто показує цифри.
AndrettiMilas

0

Відповідь різна, але натхненник @ 荒野 无 灯 вирішив видалити свою відповідь. Імхо, це найкраще, як найпростіше і гнучке рішення:

Рішення залежить від paginate_links(). Єдине, що потрібно знати, - це те base, що з самого початку буде доданий URl %_%, який буде замінено на format. Тож поки ми використовуємо get_permalink().'%_%';, ми знаємо, що в будь-якому випадку ми залишимося на поточній посаді. Всередині format, то #замінюється номером сторінки:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.