web-dev-qa-db-fra.com

Comment obtenir la liste de liens des catégories WordPress?

J'essaie de créer un plan du site personnalisé pour mes catégories de blogs WordPress. Pour cela, j'ai ajouté le code ci-dessous dans mon fichier functions.php et lorsque je l'enregistre, mon blog devient blanc. Rien ne se présente. J'ai supprimé ce code en passant par FTP, puis tout s'est bien passé.

Maintenant, je veux faire et utiliser ce code. Maintenant, quelqu'un peut-il m'aider à réparer ce code?

/* ------------------------------------------------------------------------- *
 *  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

La première erreur que je vois est une erreur de syntaxe:

depth => 0

devrait être

"depth" => 0

La deuxième erreur est que vous utilisez un objet de catégorie comme un objet de publication. Aucune de ces lignes ne fonctionnera:

Il n'y a pas de données de post à configurer. Supprimer cette ligne:

setup_postdata($category);

Un objet category n'a pas de propriété category_modified. Peut-être avez-vous besoin de la date du dernier article publié sur la catégorie (c'est une autre question) ???

//Not valid property
$category->category_modified;

get_permalink() est pour les articles, pour les catégories, utilisez plutôt get_category_link(). De plus, $ category-> ID n'est pas une propriété valide d'un objet category, utilisez $ category-> term_id à la place:

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

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