Как добавить в код все страницы категорий в карте сайта WordPress?

Ссылка скопирована
1 ответ

Есть такой код

$categoriesForSitemap = get_categories(array(  'hide_empty' => 1,   'depth' => 0,   'hierarchical' => false  )); foreach($categoriesForSitemap as $category) {     $category_link = get_category_link($cat->cat_ID); 	$sitemap .= '<url>' . '<loc>' . get_category_link($category->term_id) . '</loc>' . '<priority>1</priority>' . '<lastmod></lastmod>' . '<changefreq>daily</changefreq>' . '</url>'; }

$categoriesForSitemap = get_categories(array( 'hide_empty' => 1, 'depth' => 0, 'hierarchical' => false )); foreach($categoriesForSitemap as $category) { $category_link = get_category_link($cat->cat_ID); $sitemap .= '<url>' . '<loc>' . get_category_link($category->term_id) . '</loc>' . '<priority>1</priority>' . '<lastmod></lastmod>' . '<changefreq>daily</changefreq>' . '</url>'; }

Как в нём включить добавление всех страниц категорий? Т.е. category-name/page/2/ и так далее.

Дополнительные вопросы

Ответы:

Я так понял, что задача в получении сразу всего списка категорий
Доки:
get_categories
get_terms
wp_term_query
Параметр number выступает ограничителем количества вывода

$categoriesForSitemap  = get_terms([   'taxonomy'   => 'category',   'hide_empty' => false,   'number'     => 0,  ]);

$categoriesForSitemap = get_terms([ 'taxonomy' => 'category', 'hide_empty' => false, 'number' => 0, ]);

  • Здравствуйте. Спасибо что откликнулись.

    Заменил на ваш код - не сработало.

pantsarny @pantsarny get_posts с tax_query

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

В вашем коде уже есть несколько ошибок: вы получаете категории в переменную $categoriesForSitemap, но внутри цикла один раз обращаетесь к $cat->cat_ID, хотя переменной $cat нет. Ещё параметр hide_empty => 1 означает, что пустые рубрики не попадут в карту сайта.

Если нужно добавить все рубрики верхнего уровня и вложенные рубрики, используйте get_terms() с таксономией category. Параметр depth у get_categories не работает так, как часто ожидают; проще явно получить terms.

$categories = get_terms([
    'taxonomy'   => 'category',
    'hide_empty' => false,
]);
 
if (! is_wp_error($categories)) {
    foreach ($categories as $category) {
        $link = get_term_link($category);
 
        if (is_wp_error($link)) {
            continue;
        }
 
        $sitemap .= '<url>';
        $sitemap .= '<loc>' . esc_url($link) . '</loc>';
        $sitemap .= '<priority>0.7</priority>';
        $sitemap .= '<changefreq>daily</changefreq>';
        $sitemap .= '</url>';
    }
}

$categories = get_terms([ 'taxonomy' => 'category', 'hide_empty' => false, ]); if (! is_wp_error($categories)) { foreach ($categories as $category) { $link = get_term_link($category); if (is_wp_error($link)) { continue; } $sitemap .= '<url>'; $sitemap .= '<loc>' . esc_url($link) . '</loc>'; $sitemap .= '<priority>0.7</priority>'; $sitemap .= '<changefreq>daily</changefreq>'; $sitemap .= '</url>'; } }

Если нужны только рубрики с записями, оставьте hide_empty => true. Если хотите включить пустые рубрики, ставьте false, но для SEO обычно не стоит добавлять пустые архивы в sitemap.

Для даты изменения можно взять метаданные термина, но у рубрик в WordPress нет нормального lastmod из коробки. Практичнее вычислять дату последней записи в рубрике или оставить lastmod пустым. Если sitemap нужен для продакшена, лучше использовать Yoast/Rank Math/Google XML Sitemaps, потому что они уже учитывают canonical, noindex, типы записей и таксономии.

Итог: замените ошибочный $cat, используйте get_terms(), не добавляйте пустые рубрики без необходимости и экранируйте ссылки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно