sitemap.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. class VamtamSitemap {
  3. /**
  4. * Actions and filters
  5. */
  6. public static function setup() {
  7. add_filter( 'template_include', array( __CLASS__, 'template_loader' ) );
  8. add_action( 'vamtam-display-sitemap', array( __CLASS__, 'display_sitemap' ) );
  9. }
  10. /**
  11. * Modify current template if on sitemap page
  12. *
  13. * @param string $template original template
  14. * @return string template to be used
  15. */
  16. public static function template_loader( $template ) {
  17. if ( is_page( rd_vamtam_get_option( 'sitemap-page' ) ) ) {
  18. $template = locate_template( 'sitemap.php' );
  19. }
  20. return $template;
  21. }
  22. /**
  23. * Output the sitemap
  24. */
  25. public static function display_sitemap() {
  26. echo '<div class="sitemap">';
  27. $types = array(
  28. 'pages' => esc_html__( 'Pages', 'vamtam-consulting' ),
  29. 'categories' => esc_html__( 'Categories', 'vamtam-consulting' ),
  30. 'posts' => esc_html__( 'Posts', 'vamtam-consulting' ),
  31. 'projects' => esc_html__( 'Projects', 'vamtam-consulting' ),
  32. );
  33. foreach ( $types as $type => $name ) {
  34. echo '<h3>' . esc_html( $name ) . '</h3>';
  35. echo call_user_func( array( __CLASS__, $type ) ); // xss ok
  36. }
  37. echo '</div>';
  38. }
  39. private static function page_level( $number, $parent ) {
  40. $query = array(
  41. 'posts_per_page' => (int) $number,
  42. 'post_type' => 'page',
  43. 'order' => 'ASC',
  44. 'orderby' => 'title',
  45. 'post_parent' => $parent,
  46. );
  47. return self::display( $query );
  48. }
  49. /**
  50. * Display pages
  51. *
  52. * @return string output html
  53. */
  54. private static function pages() {
  55. return self::page_level( 1000, 0 );
  56. }
  57. /**
  58. * Display categories
  59. *
  60. * @return string output html
  61. */
  62. private static function categories() {
  63. $feed = esc_html__( 'RSS', 'vamtam-consulting' );
  64. return '<ul>' . wp_list_categories(array(
  65. 'feed' => $feed,
  66. 'show_count' => true,
  67. 'use_desc_for_title' => false,
  68. 'title_li' => false,
  69. 'echo' => 0,
  70. )) . '</ul>';
  71. }
  72. /**
  73. * Display posts
  74. *
  75. * @return string output html
  76. */
  77. private static function posts() {
  78. $query = array(
  79. 'posts_per_page' => 1000,
  80. 'post_type' => 'post',
  81. 'order' => 'ASC',
  82. 'orderby' => 'title',
  83. );
  84. return self::display( $query, true );
  85. }
  86. /**
  87. * Display projects
  88. *
  89. * @return string output html
  90. */
  91. private static function projects() {
  92. $query = array(
  93. 'posts_per_page' => 1000,
  94. 'post_type' => 'jetpack-portfolio',
  95. 'order' => 'ASC',
  96. 'orderby' => 'title',
  97. );
  98. return self::display( $query, false );
  99. }
  100. /**
  101. * Generic printer
  102. *
  103. * @param object $query WP_Query object with results
  104. * @param boolean $show_comment display number of comments
  105. * @return string HTML for this section
  106. */
  107. private static function display( $query, $show_comment = false ) {
  108. $show_comment = vamtam_sanitize_bool( $show_comment );
  109. $archive_query = new WP_Query( $query );
  110. $output = '';
  111. global $post;
  112. while ( $archive_query->have_posts() ) {
  113. $archive_query->the_post();
  114. $title = get_the_title();
  115. if ( ! empty( $title ) ) {
  116. $output .= '<li>';
  117. $output .= "<a href='" . get_permalink() . "' rel='bookmark' title='" . esc_attr( $title ) . "'>" . strip_tags( $title ) . '</a>';
  118. if ( $show_comment ) {
  119. $output .= ' (' . get_comments_number() . ')';
  120. }
  121. if ( 'page' === $post->post_type ) {
  122. $output .= self::page_level( -1, get_the_ID() );
  123. }
  124. $output .= '</li>';
  125. }
  126. }
  127. wp_reset_postdata();
  128. return '<ul>' . $output . '</ul>';
  129. }
  130. }