@@ 662-759 (lines=98) @@ | ||
659 | * @type string $last_modified The most recent timestamp to appear on the sitemap. |
|
660 | * } |
|
661 | */ |
|
662 | public function build_one_image_sitemap( $number, $from_id ) { |
|
663 | $last_post_id = $from_id; |
|
664 | $any_posts_left = true; |
|
665 | ||
666 | if ( $this->logger ) { |
|
667 | $debug_name = jp_sitemap_filename( JP_IMAGE_SITEMAP_TYPE, $number ); |
|
668 | $this->logger->report( "-- Building $debug_name" ); |
|
669 | } |
|
670 | ||
671 | $image_sitemap_xsl_url = $this->finder->construct_sitemap_url( 'image-sitemap.xsl' ); |
|
672 | ||
673 | $jetpack_version = JETPACK__VERSION; |
|
674 | ||
675 | $namespaces = Jetpack_Sitemap_Buffer::array_to_xml_attr_string( |
|
676 | /** |
|
677 | * Filter the XML namespaces included in image sitemaps. |
|
678 | * |
|
679 | * @module sitemaps |
|
680 | * |
|
681 | * @since 4.7.0 |
|
682 | * |
|
683 | * @param array $namespaces Associative array with namespaces and namespace URIs. |
|
684 | */ |
|
685 | apply_filters( |
|
686 | 'jetpack_sitemap_image_ns', |
|
687 | array( |
|
688 | 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', |
|
689 | 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd', |
|
690 | 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9', |
|
691 | 'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1', |
|
692 | ) |
|
693 | ) |
|
694 | ); |
|
695 | ||
696 | $buffer = new Jetpack_Sitemap_Buffer( |
|
697 | JP_SITEMAP_MAX_ITEMS, |
|
698 | JP_SITEMAP_MAX_BYTES, |
|
699 | <<<HEADER |
|
700 | <?xml version='1.0' encoding='UTF-8'?> |
|
701 | <!-- generator='jetpack-{$jetpack_version}' --> |
|
702 | <?xml-stylesheet type='text/xsl' href='{$image_sitemap_xsl_url}'?> |
|
703 | <urlset{$namespaces}>\n |
|
704 | HEADER |
|
705 | , |
|
706 | <<<FOOTER |
|
707 | </urlset>\n |
|
708 | FOOTER |
|
709 | , |
|
710 | /* epoch */ |
|
711 | '1970-01-01 00:00:00' |
|
712 | ); |
|
713 | ||
714 | // Add as many items to the buffer as possible. |
|
715 | while ( false === $buffer->is_full() ) { |
|
716 | $posts = $this->librarian->query_images_after_id( |
|
717 | $last_post_id, JP_SITEMAP_BATCH_SIZE |
|
718 | ); |
|
719 | ||
720 | if ( null == $posts ) { // WPCS: loose comparison ok. |
|
721 | $any_posts_left = false; |
|
722 | break; |
|
723 | } |
|
724 | ||
725 | foreach ( $posts as $post ) { |
|
726 | $current_item = $this->image_post_to_sitemap_item( $post ); |
|
727 | ||
728 | if ( true === $buffer->try_to_add_item( $current_item['xml'] ) ) { |
|
729 | $last_post_id = $post->ID; |
|
730 | $buffer->view_time( $current_item['last_modified'] ); |
|
731 | } else { |
|
732 | break; |
|
733 | } |
|
734 | } |
|
735 | } |
|
736 | ||
737 | // If no items were added, return false. |
|
738 | if ( true === $buffer->is_empty() ) { |
|
739 | return false; |
|
740 | } |
|
741 | ||
742 | // Store the buffer as the content of a jp_sitemap post. |
|
743 | $this->librarian->store_sitemap_data( |
|
744 | $number, |
|
745 | JP_IMAGE_SITEMAP_TYPE, |
|
746 | $buffer->contents(), |
|
747 | $buffer->last_modified() |
|
748 | ); |
|
749 | ||
750 | /* |
|
751 | * Now report back with the ID of the last post to be |
|
752 | * successfully added and whether there are any posts left. |
|
753 | */ |
|
754 | return array( |
|
755 | 'last_id' => $last_post_id, |
|
756 | 'any_left' => $any_posts_left, |
|
757 | 'last_modified' => $buffer->last_modified(), |
|
758 | ); |
|
759 | } |
|
760 | ||
761 | /** |
|
762 | * Build and store a single video sitemap. Returns false if no sitemap is built. |
|
@@ 778-876 (lines=99) @@ | ||
775 | * @type string $last_modified The most recent timestamp to appear on the sitemap. |
|
776 | * } |
|
777 | */ |
|
778 | public function build_one_video_sitemap( $number, $from_id ) { |
|
779 | $last_post_id = $from_id; |
|
780 | $any_posts_left = true; |
|
781 | ||
782 | if ( $this->logger ) { |
|
783 | $debug_name = jp_sitemap_filename( JP_VIDEO_SITEMAP_TYPE, $number ); |
|
784 | $this->logger->report( "-- Building $debug_name" ); |
|
785 | } |
|
786 | ||
787 | $video_sitemap_xsl_url = $this->finder->construct_sitemap_url( 'video-sitemap.xsl' ); |
|
788 | ||
789 | $jetpack_version = JETPACK__VERSION; |
|
790 | ||
791 | $namespaces = Jetpack_Sitemap_Buffer::array_to_xml_attr_string( |
|
792 | /** |
|
793 | * Filter the XML namespaces included in video sitemaps. |
|
794 | * |
|
795 | * @module sitemaps |
|
796 | * |
|
797 | * @since 4.7.0 |
|
798 | * |
|
799 | * @param array $namespaces Associative array with namespaces and namespace URIs. |
|
800 | */ |
|
801 | apply_filters( |
|
802 | 'jetpack_sitemap_video_ns', |
|
803 | array( |
|
804 | 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', |
|
805 | 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd', |
|
806 | 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9', |
|
807 | 'xmlns:video' => 'http://www.google.com/schemas/sitemap-video/1.1', |
|
808 | ) |
|
809 | ) |
|
810 | ); |
|
811 | ||
812 | $buffer = new Jetpack_Sitemap_Buffer( |
|
813 | JP_SITEMAP_MAX_ITEMS, |
|
814 | JP_SITEMAP_MAX_BYTES, |
|
815 | <<<HEADER |
|
816 | <?xml version='1.0' encoding='UTF-8'?> |
|
817 | <!-- generator='jetpack-{$jetpack_version}' --> |
|
818 | <?xml-stylesheet type='text/xsl' href='{$video_sitemap_xsl_url}'?> |
|
819 | <urlset{$namespaces}>\n |
|
820 | HEADER |
|
821 | , |
|
822 | <<<FOOTER |
|
823 | </urlset>\n |
|
824 | FOOTER |
|
825 | , |
|
826 | /* epoch */ |
|
827 | '1970-01-01 00:00:00' |
|
828 | ); |
|
829 | ||
830 | // Add as many items to the buffer as possible. |
|
831 | while ( false === $buffer->is_full() ) { |
|
832 | $posts = $this->librarian->query_videos_after_id( |
|
833 | $last_post_id, JP_SITEMAP_BATCH_SIZE |
|
834 | ); |
|
835 | ||
836 | if ( null == $posts ) { // WPCS: loose comparison ok. |
|
837 | $any_posts_left = false; |
|
838 | break; |
|
839 | } |
|
840 | ||
841 | foreach ( $posts as $post ) { |
|
842 | $current_item = $this->video_post_to_sitemap_item( $post ); |
|
843 | ||
844 | if ( true === $buffer->try_to_add_item( $current_item['xml'] ) ) { |
|
845 | $last_post_id = $post->ID; |
|
846 | $buffer->view_time( $current_item['last_modified'] ); |
|
847 | } else { |
|
848 | break; |
|
849 | } |
|
850 | } |
|
851 | } |
|
852 | ||
853 | // If no items were added, return false. |
|
854 | if ( true === $buffer->is_empty() ) { |
|
855 | return false; |
|
856 | } |
|
857 | ||
858 | if ( false === $buffer->is_empty() ) { |
|
859 | $this->librarian->store_sitemap_data( |
|
860 | $number, |
|
861 | JP_VIDEO_SITEMAP_TYPE, |
|
862 | $buffer->contents(), |
|
863 | $buffer->last_modified() |
|
864 | ); |
|
865 | } |
|
866 | ||
867 | /* |
|
868 | * Now report back with the ID of the last post to be |
|
869 | * successfully added and whether there are any posts left. |
|
870 | */ |
|
871 | return array( |
|
872 | 'last_id' => $last_post_id, |
|
873 | 'any_left' => $any_posts_left, |
|
874 | 'last_modified' => $buffer->last_modified(), |
|
875 | ); |
|
876 | } |
|
877 | ||
878 | /** |
|
879 | * Build and store a single page sitemap index. Return false if no index is built. |