Как добавить в код все страницы категорий в карте сайта WordPress?
Есть такой код
$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
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В вашем коде уже есть несколько ошибок: вы получаете категории в переменную
$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>'; } }
Если нужны только рубрики с записями, оставьте
hide_empty => true. Если хотите включить пустые рубрики, ставьтеfalse, но для SEO обычно не стоит добавлять пустые архивы в sitemap.Для даты изменения можно взять метаданные термина, но у рубрик в WordPress нет нормального
lastmodиз коробки. Практичнее вычислять дату последней записи в рубрике или оставитьlastmodпустым. Если sitemap нужен для продакшена, лучше использовать Yoast/Rank Math/Google XML Sitemaps, потому что они уже учитывают canonical, noindex, типы записей и таксономии.Итог: замените ошибочный
$cat, используйтеget_terms(), не добавляйте пустые рубрики без необходимости и экранируйте ссылки.