DPhil
@DPhil
Контент-менеджер

Как обрабатывать категории в WordPress?

Добрый день!

1. Есть сайт на WordPress, в котором вывод новостей определенной категории реализован не как полагается через отдельный урл вида www.goodsite.com/category/category-name, а на общей странице www.mysite.com/news (то есть все новости полностью и новости любой категории выводятся на одной странице (с одним и тем же урлом). Сделано это при помощи кнопок с именами категорий, на которые повешен jQuery. Если интересно, ниже код, который это реализует, но суть не в нем.

function() {
  $(".blog .nav-item").removeClass("this-item"), $(this).addClass("this-item");
  var s = $(this).attr("data-news");
  $(".block-news").removeClass("block-news_show"), $(".block-news" + s).addClass("block-news_show")
}


2. В каждой отдельной новости есть ссылка на список новостей той категории, к которой относится данная новость. Так как мы помним, что новости категории выводятся jQuery на самой странице www.mysite.com/news (файлом news.php), то эта ссылка реализована по-особенному:

<?=
    ot_get_option('footer_link6')      // это ссылка на mysite.com/news/
     . '?cats='      
     . $number         // это айдишник категории
?>


В результате генерится ссылка вида mysite.com/news/?cats=3, где 3 это айди категории

3. В файле news.php эта ссылка обрабатывается так:

<?php if(isset($_GET['cats'])) { ?>
                <?php if( ($_GET['cats'] == 3) ) { ?>


Если проверка срабатывает запускается JS-код,
function a() {
                        $('.nav-item3').click();
                    }
                    setTimeout(a, 0.3);

который, если я не ошибаюсь, жмет на кнопку, на которую, как мы помним из пункта 1, повешен другой JS-код, который оставляет на странице mysite.com/news/ только новости нужной (выбранной) категории.

Более полная версия:
<script>
        $(document).ready(function() {
            $('.header a').css('color', '#171717');
            $('.header .this-nav a').css('color', 'white');
            $('.header').css('background', 'white');
            $('.header-nav_list .current_page_item').addClass('this-nav');
            $('.bread').find('span').addClass('mobile-hidden');
            $('.bread .current').removeClass('mobile-hidden');
			
			var button_lang = localStorage.getItem('switch_lang');
			
			if(button_lang == 'en') {
				$('.mc_signup_submit input').attr('value','Subscribe');
			} else {
				$('.mc_signup_submit input').attr('value','Подписка');
			}

            <?php if(isset($_GET['cats'])) { ?>
                <?php if( ($_GET['cats'] == 3) ) { ?>
                    function a() {
                        $('.nav-item3').click();
                    }
                    setTimeout(a, 0.3);


Вопросы:
1. Можно ли заменить ссылку вида mysite.com/news/?cats=3 на ссылку вида mysite.com/news/category-name. Ну то есть заменить-то можно, но как настроить ее прием, если GET-ом уже не воспользуешься? Разрезать урл по слешам? Может быть можно задать ссылке mysite.com/news/?cats=3 "псевдоним" (такое понятие "псевдоним ссылки" вообще существует?)

2 вопрос философский. Насколько и чем вредна такая нестандартная реализация вывода записей категории? Может, лучше запилить отдельные странички под каждую категории, как изначально и задумано в WP?

Исходный вопрос:

Есть сайт на WP, на нем раздел Новости. Сами новости, расположенные в Новостях принадлежат одной из трех категорий. В теле каждой отдельной новости есть ссылка на список всех новостей той же категории, что и эта новость. Ссылка вида: mysite.com/news/?cats=3. Когда эта ссылка принимается, то 3 вытаскивается GET-ом, и дальше обрабатывается.

Я поменял ссылки mysite.com/news/?cats=3 на mysite.com/news/category-name. Как мне теперь настроить прием этих ссылок, учитывая, что GET я теперь использовать не могу?

Или нужно было не трогать ссылку и как-то настроить .htaccess, чтобы ссылка просто отображалась красиво, а логика осталась прежней?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@antowa_plawkevich
Junior Front-end developer
Тяжело ответить без наличия кода
ну а вообще я бы выводил так
//получаем все категорию новость
<?php $categories = get_categories([
     'parent' => ID
]);
//проходимся по массиву и вытаскиваем значения
foreach($categories as $category):?>
<div><a "href=<?php echo $category->term_id;?>"><?php echo category->name;?></a><div>
<?php endforeach;?>
// ну и далее выводим уже наши посты в нужной вам обертке и и тд
<?php 
$post = get_posts([
'category' => ID
]);
foreach($posts as $post):?>
//разметка 
<div> <?php the_title?>/div>
//и тд и тп
<?php endforeach;?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы