Ищете, как исключить записи блога из кнопок “Предыдущий/Следующий”

Вопрос или проблема

Я работаю с некоторыми условными элементами и думал, что все настроено правильно, но это все еще не работает так, как нужно. Вы можете увидеть мой сайт здесь.

Я отобразил только категорию Legal Libation Columns (98) на этой странице и исключил ее из блога. Отлично.

Но когда вы нажимаете на запись, чтобы просмотреть всю статью, а затем переходите к предыдущим или следующим ссылкам, чтобы прочитать другой пост, они все перепутаны.

Вот что я вставил в свой single.php, чтобы предотвратить это. Они сами по себе работают, но вместе в условии if else они

<?php if (has_category('Legal Libation Columns') && has_tag('Legal Libation Columns')): ?> 
    <span class="nav-previous"><?php previous_post_link('%link', '<span class="meta-nav">&larr;</span> Предыдущий в Legal Libation Columns', TRUE); ?></span>
    <span class="nav-next"><?php next_post_link('%link', 'Следующий в Legal Libation Columns <span class="meta-nav">&rarr;</span>', TRUE); ?></span>
<?php  else: ?>
    <span class="nav-previous"><?php previous_post_link( '%link', __( '<span class="meta-nav">&larr;</span> Предыдущий', 'toolbox' ) ); ?></span>
    <span class="nav-next"><?php next_post_link( '%link', __( 'Следующий <span class="meta-nav">&rarr;</span>', 'toolbox' ) ); ?></span>
<?php endif; ?>

Я в основном хочу, чтобы эта категория была полностью отделена от блога.
Я очень плохо разбираюсь в php или программировании, есть ли какие-либо советы, как изменить мой код, чтобы добиться этого?

ОБНОВЛЕНИЕ: Вот как я фильтрую свою категорию из блога

function exclude_category($query) {
    if ( $query->is_home() ) {
        $query->set('cat', '-98');
    }
    return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Вы можете исключить категории из вашей страницы записей, используя pre_get_posts

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() && !is_admin()) {
        $query->set( 'cat', '-1347' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );

Может, будет лучше использовать слаг или ID категории. То же самое и с тегами.

Также есть 5 параметров, на которые вы можете обратить внимание для previous_post_link и next_post_link

Я не уверен, как ваши посты взаимодействуют друг с другом и как они связаны друг с другом через категории и теги, но судя по вашему вопросу, посты из этой одной конкретной категории должны быть полностью отделены от вашего блога.

Работа с встроенными таксономиями (категории, теги и форматы постов) и встроенными типами постов иногда может давать нежелательные результаты, так как они по умолчанию включены в основной запрос. Создание системы постов, которые должны взаимодействовать по-другому и не должны иметь отношения к другим записям, может по этой причине быть проблематичным.

Да, есть пользовательские запросы (например, WP_Query или pre_get_posts, которые изменяют основной запрос перед его выполнением, а затем есть условные теги , чтобы включить или исключить определенные элементы. Но это может стать довольно запутанным и просто большим головоломкой.

Судя по тому, что сказано в вашем вопросе, рассматривали ли вы возможность использования пользовательских типов постов в сочетании с пользовательскими таксономиями для этих постов, которые вам нужно отделить от вашего блога.

Плюсы пользовательских типов постов

  • Типы постов исключены из основного запроса

  • Вы можете иметь отдельный архив и страницу для каждого пользовательского типа поста. См.: Иерархия шаблонов

  • Пользовательские типы постов могут иметь свои собственные таксономии (иерархические или нет) вне стандартной системы постов. Также встроенные таксономии могут быть добавлены к пользовательским типам постов, если это необходимо, которые затем будут совместно использоваться с вашей обычной системой постов.

  • pre_get_posts может легко использоваться для включения пользовательских типов постов в основной запрос, если это необходимо.

Существует множество плагинов и учебников по этим темам. Также есть плагины, которые помогут вам массово изменить типы постов определенных записей.

Это может не ответить на ваш вопрос, но это просто соображения, о которых вы можете помнить в ближайшем будущем.

Ответ или решение

Как исключить записи из категории с кнопками «Предыдущая/Следующая» в WordPress

Введение

Вы сталкиваетесь с задачей, связанной с кнопками навигации «Предыдущая» и «Следующая» в вашем блоге WordPress. Вы хотите, чтобы эти кнопки не показывали записи из определённой категории, в данном случае «Legal Libation Columns». Это довольно распространённая проблема, и её можно решить с помощью условных операторов в PHP, модифицируя ваш файл single.php. Ниже приведены рекомендации по исправлению вашего кода и альтернативные подходы для дальнейшего упрощения.

Устранение проблем в single.php

Ваш текущий код имеет некоторые логические ошибки, которые мешают правильному отображению кнопок навигации. Вместо использования как категории, так и тегов для управления видимостью, вы можете упростить код следующим образом:

<?php 
if (has_category('Legal Libation Columns')) : 
    ?>
    <span class="nav-previous"><?php previous_post_link('%link', '<span class="meta-nav">&larr;</span> Предыдущая в Legal Libation Columns', true); ?></span>
    <span class="nav-next"><?php next_post_link('%link', 'Следующая в Legal Libation Columns <span class="meta-nav">&rarr;</span>', true); ?></span>
<?php 
else : 
    ?>
    <span class="nav-previous"><?php previous_post_link('%link', '<span class="meta-nav">&larr;</span> Предыдущая', true); ?></span>
    <span class="nav-next"><?php next_post_link('%link', 'Следующая <span class="meta-nav">&rarr;</span>', true); ?></span>
<?php 
endif; 
?>

Этот код проверяет, принадлежит ли запись к категории «Legal Libation Columns». Если да, то кнопки будут указывать на предыдущие и следующие записи из этой категории. В противном случае будут отображаться обычные кнопки навигации.

Исключение категории из главного запроса

Вы также правильно реализовали фильтрацию вашего блога, исключая записи из данной категории. Убедитесь, что ваш фильтр правильно работает только для главного запроса:

function exclude_category($query) {
    if ( $query->is_home() && $query->is_main_query() && !is_admin() ) {
        $query->set('cat', '-98'); // Замените 98 на ID вашей категории
    }
}
add_filter('pre_get_posts', 'exclude_category');

Этот код будет исключать все записи из категории с ID 98 на главной странице вашего блога.

Рекомендация по использованию пользовательских типов записей

Если ваши записи в категории «Legal Libation Columns» должны быть независимыми от вашего блога, вам стоит рассмотреть возможность использования пользовательских типов записей. Это позволит вам полностью отделить функционал и организацию записей.

Преимущества пользовательских типов записей:

  • Отсутствие связи с основным запросом.
  • Возможность создания отдельных архивов и шаблонов.
  • Гибкость в управлении таксономией.

Вы можете создать пользовательский тип записи с помощью следующего кода:

function create_custom_post_type() {
    register_post_type('legal_libation',
        array(
            'labels' => array(
                'name' => __('Legal Libation Columns'),
                'singular_name' => __('Legal Libation Column')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'legal-libation-columns'),
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );
}
add_action('init', 'create_custom_post_type');

Заключение

Следуя этим рекомендациям, вы сможете более эффективно управлять видимостью записей на своем сайте WordPress и устранить проблемы, связанные с навигацией между записями. Рассмотрите возможность использования пользовательских типов записей для создания более четкой структуры контента. Это особенно полезно, если у вас есть записи, которые не должны пересекаться с основным контентом блога.

Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их. Удачи в ваших усилиях по настройке сайта!

Оцените материал
Добавить комментарий

Капча загружается...