Поддержка Проблемы и решения Переход по постам только внутри рубрики

  • Здравствуйте.
    Подскажите пожалуйста, как сделать, чтобы листая посты от одного к другому, переход осуществлялся исключительно внутри той рубрики, к которой он относится?

    Например есть рубрика «ТЕОРИЯ» и «ПРАКТИКА», человек прочитав пост, внизу имеет возможность нажать СЛЕДУЮЩИЙ и ПРЕДЫДУЩИЙ, если он находился на первом посте в рубрики ТЕОРИЯ и дочитав нажмет кнопку ПРЕДЫДУЩИЙ, то ЦМС перебросит его на последний пост но уже в рубрики ПРАКТИКА, а пользователь будет думать, что по прежнему читает ТЕОРИЮ. Как этого избежать, как если бы он находился на самом последнем опубликованном посте, и не имел возможности нажать СЛЕДУЮЩИЙ.

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Если для такой навигации в шаблоне используются функции 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?

    • Ответ изменён 4 года, 5 месяцев назад пользователем O.
    • Ответ изменён 4 года, 5 месяцев назад пользователем O.

    Скорее всего, только правкой шаблона. Я не встречал хуков, на которых можно поменять значение параметра 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();

    Помогите пожалуйста внести необходимые изменения для осуществления задуманного.

    • Ответ изменён 4 года, 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 того же автора. Всем спасибо!

    • Ответ изменён 4 года, 5 месяцев назад пользователем O.

    Всем на здоровье! 🙂 🙂 🙂

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Переход по постам только внутри рубрики» закрыта для новых ответов.