Переход по постам только внутри рубрики
-
Здравствуйте.
Подскажите пожалуйста, как сделать, чтобы листая посты от одного к другому, переход осуществлялся исключительно внутри той рубрики, к которой он относится?Например есть рубрика «ТЕОРИЯ» и «ПРАКТИКА», человек прочитав пост, внизу имеет возможность нажать СЛЕДУЮЩИЙ и ПРЕДЫДУЩИЙ, если он находился на первом посте в рубрики ТЕОРИЯ и дочитав нажмет кнопку ПРЕДЫДУЩИЙ, то ЦМС перебросит его на последний пост но уже в рубрики ПРАКТИКА, а пользователь будет думать, что по прежнему читает ТЕОРИЮ. Как этого избежать, как если бы он находился на самом последнем опубликованном посте, и не имел возможности нажать СЛЕДУЮЩИЙ.
-
Если для такой навигации в шаблоне используются функции previous_post_link() и next_posts_link(), то у них есть параметр in_same_term. По умолчанию он имеет значение false. Нужно сделать true, и тогда будет листать внутри рубирики/метки
Матчасть:
https://codex.wordpress.org/Function_Reference/previous_post_link
https://codex.wordpress.org/Function_Reference/next_post_linkВо избежание потери изменений при обновлении Темы, нужно создать дочернюю Тему и вносить вправки в ее шаблоны.
листая посты от одного к другому, переход осуществлялся исключительно внутри той рубрики, к которой он относится?
@yube
Меня тоже очень заинтересовала эта идея. Правильно ли я понял, что ее, согласно ссылке на мат. часть, можно решить двумя путями — или правкой шаблона single.php или добавлением соответствующего сниппета в function.php?Скорее всего, только правкой шаблона. Я не встречал хуков, на которых можно поменять значение параметра in_same_term, и все функции в цепочке не замещаемые. А где Вы увидели «соответствующего сниппета в function.php?» Может уже есть, а мне никто не сказал 🙂
А если в теме вообще нет параметра in_same_term? Поискал по всем файлам через NotePad++.
В single.php есть previous_post_link() и next_posts_link(), но не более того.
Тема используется Verbosa: https://www.cryoutcreations.eu/wordpress-themes/verbosaА вот сам single.php
<?php /** * The Template for displaying all single posts. * * @package Verbosa */ get_header();?> <div id="container" class="<?php echo verbosa_get_layout_class(); ?>"> <?php verbosa_header_section() ?> <main id="main" role="main" class="main"> <?php cryout_before_content_hook(); ?> <?php while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); cryout_schema_microdata('article');?>> <?php cryout_singlefeatured_hook(); ?> <header class="entry-header"> <?php cryout_post_title_hook(); ?> <?php the_title( '<h1 class="entry-title" ' . cryout_schema_microdata('entry-title', 0) . '>', '</h1>' ); ?> <div class="entry-meta"> <?php cryout_post_meta_hook(); ?> </div><!-- .entry-meta --> </header> <?php cryout_singular_before_inner_hook(); ?> <div class="entry-content" <?php cryout_schema_microdata('entry-content'); ?>> <?php the_content(); ?> <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'verbosa' ), 'after' => '</span></div>' ) ); ?> </div><!-- .entry-content --> <?php if ( get_the_author_meta( 'description' ) ) { // If a user has filled out their description, show a bio on their entries get_template_part( 'content/author-bio' ); } ?> <footer class="entry-meta"> <?php cryout_post_footer_hook(); ?> </footer><!-- .entry-meta --> <nav id="nav-below" class="navigation" role="navigation"> <div class="nav-previous"><em><?php _e('Previous Post', 'verbosa');?></em><?php previous_post_link( '%link', '<span>%title</span>' ); ?></div> <div class="nav-next"><em><?php _e('Next Post', 'verbosa');?></em><?php next_post_link( '%link', '<span>%title</span>' ); ?></div> </nav><!-- #nav-below --> <?php comments_template( '', true ); ?> <?php cryout_singular_after_inner_hook(); ?> </article><!-- #post-## --> <?php endwhile; // end of the loop. ?> <?php cryout_after_content_hook(); ?> </main><!-- #main --> </div><!-- #container --> <?php get_footer();
Помогите пожалуйста внести необходимые изменения для осуществления задуманного.
- Ответ изменён 6 лет, 5 месяцев назад пользователем Yui.
А если в теме вообще нет параметра in_same_term?
А кто сказал что должно быть, да еще и в таком виде? Про аргументы функций и их передачу см. тут http://php.net/manual/ru/functions.arguments.php
А куда деваться? Сел за руль — учи ПДД.В single.php есть previous_post_link() и next_posts_link(), но не более того.
Более, более. Два параметра уже есть, осталось дописать третий, чтобы изменить поведение по умолчанию. Вот так:
<?php previous_post_link( ‘%link’, ‘<span>%title</span>’, true ); ?>
А еще в формочке тут есть кнопка code. Угадайте, для чего она нужна? 🙂
Юрий, я прошу прощения, в следующий раз буду внимательней, по поводу CODE.
СПАСИБО ВАМ ОГРОМНОЕ!!!!
ВСЕ ЗАРАБОТАЛО!!!И спасибо Вам за мануалы! Я ОБЯЗАТЕЛЬНО ИХ ИЗУЧУ!!!
Вы же нашли в коде вызовы этих функций, вот обоим в аргументы добавьте теретий, т.е. допишите
, true
Получится так:<?php /** * The Template for displaying all single posts. * * @package Verbosa */ get_header();?> <div id="container" class="<?php echo verbosa_get_layout_class(); ?>"> <?php verbosa_header_section() ?> <main id="main" role="main" class="main"> <?php cryout_before_content_hook(); ?> <?php while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); cryout_schema_microdata('article');?>> <?php cryout_singlefeatured_hook(); ?> <header class="entry-header"> <?php cryout_post_title_hook(); ?> <?php the_title( '<h1 class="entry-title" ' . cryout_schema_microdata('entry-title', 0) . '>', '</h1>' ); ?> <div class="entry-meta"> <?php cryout_post_meta_hook(); ?> </div><!-- .entry-meta --> </header> <?php cryout_singular_before_inner_hook(); ?> <div class="entry-content" <?php cryout_schema_microdata('entry-content'); ?>> <?php the_content(); ?> <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'verbosa' ), 'after' => '</span></div>' ) ); ?> </div><!-- .entry-content --> <?php if ( get_the_author_meta( 'description' ) ) { // If a user has filled out their description, show a bio on their entries get_template_part( 'content/author-bio' ); } ?> <footer class="entry-meta"> <?php cryout_post_footer_hook(); ?> </footer><!-- .entry-meta --> <nav id="nav-below" class="navigation" role="navigation"> <div class="nav-previous"><em><?php _e('Previous Post', 'verbosa');?></em><?php previous_post_link( '%link', '<span>%title</span>', true ); ?></div> <div class="nav-next"><em><?php _e('Next Post', 'verbosa');?></em><?php next_post_link( '%link', '<span>%title</span>', true ); ?></div> </nav><!-- #nav-below --> <?php comments_template( '', true ); ?> <?php cryout_singular_after_inner_hook(); ?> </article><!-- #post-## --> <?php endwhile; // end of the loop. ?> <?php cryout_after_content_hook(); ?> </main><!-- #main --> </div><!-- #container --> <?php get_footer();
Просто я считаю, что гонять скрипт через форум рискованно, ибо может что-то повредиться при копировании даже в режиме code, а потом сиди ищи что пошло не так. Такие онлан-правки если и делать, то на рекомендованном Правилами форума pastebin.com.
СПАСИБО ВАМ ОГРОМНОЕ!!!!
ВСЕ ЗАРАБОТАЛО!!!И спасибо Вам за мануалы! Я ОБЯЗАТЕЛЬНО ИХ ИЗУЧУ!!!
У меня тоже заработало! Тема Septera того же автора. Всем спасибо!
- Ответ изменён 6 лет, 5 месяцев назад пользователем O.
Всем на здоровье! 🙂 🙂 🙂
- Тема «Переход по постам только внутри рубрики» закрыта для новых ответов.