it-swarm.dev

Jak uzyskać listę linków kategorii WordPress?

Próbuję stworzyć niestandardową mapę witryny dla moich kategorii blogów WordPress. Do tego dodałem poniższy kod w moim pliku functions.php, a kiedy go zapiszę, mój blog staje się biały. Nic się nie pojawia. Usunąłem ten kod, przechodząc przez FTP, a potem wszystko w porządku.

Teraz chcę utworzyć i użyć tego kodu. Czy ktoś może mi pomóc naprawić ten kod?

/* ------------------------------------------------------------------------- *
 *  Custom Dynamic XML Sitemap Generator For Categories
/* ------------------------------------------------------------------------- */
add_action("publish_post", "cat_create_sitemap");
add_action("publish_page", "cat_create_sitemap");
function cat_create_sitemap() {
  $categoriesForSitemap = get_categories(array(
    'hide_empty' => 0, 
    depth => 0, 
    'hierarchical' => false
  ));

  $sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
  $sitemap .= '<?xml-stylesheet type="text/xsl" href="sitemap-style.xsl"?>';
  $sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  foreach($categoriesForSitemap as $category) {
    setup_postdata($category);
    $categorydate = explode(" ", $category->category_modified);
    $sitemap .= '<url>'.
      '<loc>'. get_permalink($category->ID) .'</loc>'.
      '<priority>1</priority>'.
      '<lastmod>'. $categorydate[0] .'</lastmod>'.
      '<changefreq>daily</changefreq>'.
    '</url>';
  }
  $sitemap .= '</urlset>';
  $fp = fopen(ABSPATH . "custom-cat-sitemap.xml", 'w');
  fwrite($fp, $sitemap);
  fclose($fp);
}
2
Muhammad Hassan

Błąd pięści, który widzę, to błąd składniowy:

depth => 0

powinno być

"depth" => 0

Drugi błąd polega na tym, że używasz obiektu kategorii, takiego jak obiekt postu. Żadna z tych linii nie zadziała:

Brak danych do skonfigurowania. Usuń tę linię:

setup_postdata($category);

Obiekt kategorii nie ma właściwości category_modified. Może potrzebujesz daty ostatniego opublikowanego postu w tej kategorii (to kolejne pytanie) ???

//Not valid property
$category->category_modified;

get_permalink() jest dla postów, natomiast dla kategorii użyj get_category_link(). Ponadto $ category-> ID nie jest poprawną właściwością obiektu kategorii, zamiast tego użyj $ category-> term_id:

//Incorrect
get_permalink($category->ID);

//Correct
get_category_link($category->term_id);
3
cybmeta