223 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * The Sitemap wizard step
 | 
						|
 *
 | 
						|
 * @since      0.9.0
 | 
						|
 * @package    RankMath
 | 
						|
 * @subpackage RankMath\Wizard
 | 
						|
 * @author     Rank Math <support@rankmath.com>
 | 
						|
 */
 | 
						|
 | 
						|
namespace RankMath\Wizard;
 | 
						|
 | 
						|
use RankMath\KB;
 | 
						|
use RankMath\Helper;
 | 
						|
 | 
						|
defined( 'ABSPATH' ) || exit;
 | 
						|
 | 
						|
/**
 | 
						|
 * Step class.
 | 
						|
 */
 | 
						|
class Sitemap implements Wizard_Step {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Render step body.
 | 
						|
	 *
 | 
						|
	 * @param object $wizard Wizard class instance.
 | 
						|
	 *
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function render( $wizard ) {
 | 
						|
		?>
 | 
						|
		<header>
 | 
						|
			<h1><?php esc_html_e( 'Sitemap', 'rank-math' ); ?> </h1>
 | 
						|
			<p>
 | 
						|
				<?php
 | 
						|
				/* translators: Link to How to Setup Sitemap KB article */
 | 
						|
				printf( esc_html__( 'Choose your Sitemap configuration and select which type of posts or pages you want to include in your Sitemaps. %s', 'rank-math' ), '<a href="' . KB::get( 'configure-sitemaps', 'SW Sitemap Step' ) . '" target="_blank">' . esc_html__( 'Learn more.', 'rank-math' ) . '</a>' );
 | 
						|
				?>
 | 
						|
			</p>
 | 
						|
		</header>
 | 
						|
 | 
						|
		<?php $wizard->cmb->show_form(); ?>
 | 
						|
 | 
						|
		<footer class="form-footer wp-core-ui rank-math-ui">
 | 
						|
			<?php $wizard->get_skip_link(); ?>
 | 
						|
			<button type="submit" class="button button-primary"><?php esc_html_e( 'Save and Continue', 'rank-math' ); ?></button>
 | 
						|
		</footer>
 | 
						|
		<?php
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Render form for step.
 | 
						|
	 *
 | 
						|
	 * @param object $wizard Wizard class instance.
 | 
						|
	 *
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function form( $wizard ) {
 | 
						|
		$wizard->cmb->add_field(
 | 
						|
			[
 | 
						|
				'id'      => 'sitemap',
 | 
						|
				'type'    => 'toggle',
 | 
						|
				'name'    => esc_html__( 'Sitemaps', 'rank-math' ),
 | 
						|
				'desc'    => esc_html__( 'XML Sitemaps help search engines index your website's content more effectively.', 'rank-math' ),
 | 
						|
				'default' => Helper::is_module_active( 'sitemap' ) ? 'on' : 'off',
 | 
						|
			]
 | 
						|
		);
 | 
						|
 | 
						|
		$wizard->cmb->add_field(
 | 
						|
			[
 | 
						|
				'id'      => 'include_images',
 | 
						|
				'type'    => 'toggle',
 | 
						|
				'name'    => esc_html__( 'Include Images', 'rank-math' ),
 | 
						|
				'desc'    => esc_html__( 'Include reference to images from the post content in sitemaps. This helps search engines index your images better.', 'rank-math' ),
 | 
						|
				'default' => Helper::get_settings( 'sitemap.include_images' ) ? 'on' : 'off',
 | 
						|
				'classes' => 'features-child',
 | 
						|
				'dep'     => [ [ 'sitemap', 'on' ] ],
 | 
						|
			]
 | 
						|
		);
 | 
						|
 | 
						|
		// Post Types.
 | 
						|
		$post_types = $this->get_post_types();
 | 
						|
		$wizard->cmb->add_field(
 | 
						|
			[
 | 
						|
				'id'      => 'sitemap_post_types',
 | 
						|
				'type'    => 'multicheck',
 | 
						|
				'name'    => esc_html__( 'Public Post Types', 'rank-math' ),
 | 
						|
				'desc'    => esc_html__( 'Select post types to enable SEO options for them and include them in the sitemap.', 'rank-math' ),
 | 
						|
				'options' => $post_types['post_types'],
 | 
						|
				'default' => $post_types['defaults'],
 | 
						|
				'classes' => 'features-child cmb-multicheck-inline' . ( count( $post_types['post_types'] ) === count( $post_types['defaults'] ) ? ' multicheck-checked' : '' ),
 | 
						|
				'dep'     => [ [ 'sitemap', 'on' ] ],
 | 
						|
			]
 | 
						|
		);
 | 
						|
 | 
						|
		// Taxonomies.
 | 
						|
		$taxonomies = $this->get_taxonomies();
 | 
						|
		$wizard->cmb->add_field(
 | 
						|
			[
 | 
						|
				'id'      => 'sitemap_taxonomies',
 | 
						|
				'type'    => 'multicheck',
 | 
						|
				'name'    => esc_html__( 'Public Taxonomies', 'rank-math' ),
 | 
						|
				'desc'    => esc_html__( 'Select taxonomies to enable SEO options for them and include them in the sitemap.', 'rank-math' ),
 | 
						|
				'options' => $taxonomies['taxonomies'],
 | 
						|
				'default' => $taxonomies['defaults'],
 | 
						|
				'classes' => 'features-child cmb-multicheck-inline' . ( count( $taxonomies['taxonomies'] ) === count( $taxonomies['defaults'] ) ? ' multicheck-checked' : '' ),
 | 
						|
				'dep'     => [ [ 'sitemap', 'on' ] ],
 | 
						|
			]
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Save handler for step.
 | 
						|
	 *
 | 
						|
	 * @param array  $values Values to save.
 | 
						|
	 * @param object $wizard Wizard class instance.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function save( $values, $wizard ) {
 | 
						|
		$settings = rank_math()->settings->all_raw();
 | 
						|
		Helper::update_modules( [ 'sitemap' => $values['sitemap'] ] );
 | 
						|
 | 
						|
		if ( 'on' === $values['sitemap'] ) {
 | 
						|
			$settings['sitemap']['include_images'] = $values['include_images'];
 | 
						|
 | 
						|
			$settings = $this->save_post_types( $settings, $values );
 | 
						|
			$settings = $this->save_taxonomies( $settings, $values );
 | 
						|
			Helper::update_all_settings( null, null, $settings['sitemap'] );
 | 
						|
		}
 | 
						|
 | 
						|
		Helper::schedule_flush_rewrite();
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get post type data.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	private function get_post_types() {
 | 
						|
		$p_defaults = [];
 | 
						|
		$post_types = Helper::choices_post_types();
 | 
						|
		unset( $post_types['attachment'] );
 | 
						|
 | 
						|
		foreach ( $post_types as $post_type => $object ) {
 | 
						|
			if ( true === Helper::get_settings( "sitemap.pt_{$post_type}_sitemap" ) ) {
 | 
						|
				$p_defaults[] = $post_type;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return [
 | 
						|
			'defaults'   => $p_defaults,
 | 
						|
			'post_types' => $post_types,
 | 
						|
		];
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get taxonomies data.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	private function get_taxonomies() {
 | 
						|
		$t_defaults = [];
 | 
						|
		$taxonomies = Helper::get_accessible_taxonomies();
 | 
						|
		unset( $taxonomies['post_tag'], $taxonomies['post_format'], $taxonomies['product_tag'] );
 | 
						|
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
 | 
						|
		foreach ( $taxonomies as $taxonomy => $label ) {
 | 
						|
			if ( true === Helper::get_settings( "sitemap.tax_{$taxonomy}_sitemap" ) ) {
 | 
						|
				$t_defaults[] = $taxonomy;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return [
 | 
						|
			'defaults'   => $t_defaults,
 | 
						|
			'taxonomies' => $taxonomies,
 | 
						|
		];
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Save Post Types
 | 
						|
	 *
 | 
						|
	 * @param array $settings Array of all settings.
 | 
						|
	 * @param array $values   Array of posted values.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	private function save_post_types( $settings, $values ) {
 | 
						|
		$post_types = Helper::choices_post_types();
 | 
						|
		if ( ! isset( $values['sitemap_post_types'] ) ) {
 | 
						|
			$values['sitemap_post_types'] = [];
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( $post_types as $post_type => $object ) {
 | 
						|
			$settings['sitemap'][ "pt_{$post_type}_sitemap" ] = in_array( $post_type, $values['sitemap_post_types'], true ) ? 'on' : 'off';
 | 
						|
		}
 | 
						|
 | 
						|
		return $settings;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Save Taxonomies
 | 
						|
	 *
 | 
						|
	 * @param array $settings Array of all settings.
 | 
						|
	 * @param array $values   Array of posted values.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	private function save_taxonomies( $settings, $values ) {
 | 
						|
		$taxonomies = Helper::get_accessible_taxonomies();
 | 
						|
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
 | 
						|
		if ( ! isset( $values['sitemap_taxonomies'] ) ) {
 | 
						|
			$values['sitemap_taxonomies'] = [];
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( $taxonomies as $taxonomy => $label ) {
 | 
						|
			$settings['sitemap'][ "tax_{$taxonomy}_sitemap" ] = in_array( $taxonomy, $values['sitemap_taxonomies'], true ) ? 'on' : 'off';
 | 
						|
		}
 | 
						|
 | 
						|
		return $settings;
 | 
						|
	}
 | 
						|
}
 |