*/
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 ) {
?>
cmb->show_form(); ?>
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;
}
}