| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- class VamtamSitemap {
- /**
- * Actions and filters
- */
- public static function setup() {
- add_filter( 'template_include', array( __CLASS__, 'template_loader' ) );
- add_action( 'vamtam-display-sitemap', array( __CLASS__, 'display_sitemap' ) );
- }
- /**
- * Modify current template if on sitemap page
- *
- * @param string $template original template
- * @return string template to be used
- */
- public static function template_loader( $template ) {
- if ( is_page( rd_vamtam_get_option( 'sitemap-page' ) ) ) {
- $template = locate_template( 'sitemap.php' );
- }
- return $template;
- }
- /**
- * Output the sitemap
- */
- public static function display_sitemap() {
- echo '<div class="sitemap">';
- $types = array(
- 'pages' => esc_html__( 'Pages', 'vamtam-consulting' ),
- 'categories' => esc_html__( 'Categories', 'vamtam-consulting' ),
- 'posts' => esc_html__( 'Posts', 'vamtam-consulting' ),
- 'projects' => esc_html__( 'Projects', 'vamtam-consulting' ),
- );
- foreach ( $types as $type => $name ) {
- echo '<h3>' . esc_html( $name ) . '</h3>';
- echo call_user_func( array( __CLASS__, $type ) ); // xss ok
- }
- echo '</div>';
- }
- private static function page_level( $number, $parent ) {
- $query = array(
- 'posts_per_page' => (int) $number,
- 'post_type' => 'page',
- 'order' => 'ASC',
- 'orderby' => 'title',
- 'post_parent' => $parent,
- );
- return self::display( $query );
- }
- /**
- * Display pages
- *
- * @return string output html
- */
- private static function pages() {
- return self::page_level( 1000, 0 );
- }
- /**
- * Display categories
- *
- * @return string output html
- */
- private static function categories() {
- $feed = esc_html__( 'RSS', 'vamtam-consulting' );
- return '<ul>' . wp_list_categories(array(
- 'feed' => $feed,
- 'show_count' => true,
- 'use_desc_for_title' => false,
- 'title_li' => false,
- 'echo' => 0,
- )) . '</ul>';
- }
- /**
- * Display posts
- *
- * @return string output html
- */
- private static function posts() {
- $query = array(
- 'posts_per_page' => 1000,
- 'post_type' => 'post',
- 'order' => 'ASC',
- 'orderby' => 'title',
- );
- return self::display( $query, true );
- }
- /**
- * Display projects
- *
- * @return string output html
- */
- private static function projects() {
- $query = array(
- 'posts_per_page' => 1000,
- 'post_type' => 'jetpack-portfolio',
- 'order' => 'ASC',
- 'orderby' => 'title',
- );
- return self::display( $query, false );
- }
- /**
- * Generic printer
- *
- * @param object $query WP_Query object with results
- * @param boolean $show_comment display number of comments
- * @return string HTML for this section
- */
- private static function display( $query, $show_comment = false ) {
- $show_comment = vamtam_sanitize_bool( $show_comment );
- $archive_query = new WP_Query( $query );
- $output = '';
- global $post;
- while ( $archive_query->have_posts() ) {
- $archive_query->the_post();
- $title = get_the_title();
- if ( ! empty( $title ) ) {
- $output .= '<li>';
- $output .= "<a href='" . get_permalink() . "' rel='bookmark' title='" . esc_attr( $title ) . "'>" . strip_tags( $title ) . '</a>';
- if ( $show_comment ) {
- $output .= ' (' . get_comments_number() . ')';
- }
- if ( 'page' === $post->post_type ) {
- $output .= self::page_level( -1, get_the_ID() );
- }
- $output .= '</li>';
- }
- }
- wp_reset_postdata();
- return '<ul>' . $output . '</ul>';
- }
- }
|