<?php /** * Bulk Edit class. * * Handles bulk editing of SureRank robot settings for posts and pages. * * @package SureRank\Inc\Admin */ namespace SureRank\Inc\Admin; use SureRank\Inc\Functions\Helper as FunctionsHelper; use SureRank\Inc\Traits\Get_Instance; defined( 'ABSPATH' ) || exit; /** * SureRank Bulk Edit * * Handles bulk editing of robot settings (Index/NoIndex, Follow/NoFollow) for posts. */ class BulkEdit { use Get_Instance; /** * Flag to check if fields have been added. * * @var bool */ private static $fields_added = false; /** * Constructor. */ public function __construct() { $post_types = array_keys( FunctionsHelper::get_public_cpts() ); add_action( 'bulk_edit_custom_box', [ $this, 'add_bulk_edit_fields' ], 10, 2 ); foreach ( $post_types as $post_type ) { add_action( "save_post_{$post_type}", [ $this, 'save_bulk_edit' ], 10, 2 ); } } /** * Add SureRank bulk edit fields to the post bulk edit form. * * @param string $column_name The name of the column. * @param string $post_type The post type. * @return void */ public function add_bulk_edit_fields( string $column_name, string $post_type ): void { if ( ! current_user_can( 'manage_options' ) ) { return; } if ( self::$fields_added ) { return; } ?> <fieldset class="inline-edit-col-right"> <div class="inline-edit-col"> <div class="inline-edit-group wp-clearfix"> <span class="title inline-edit-surerank-settings" style="font-weight: bold; margin-bottom: 5px; display: block;"><?php esc_html_e( 'SURERANK SETTINGS', 'surerank' ); ?></span> <div style="display: flex; flex-direction: column; gap: 10px;"> <label> <span class="title"><?php esc_html_e( 'No Index -', 'surerank' ); ?></span> <select name="surerank_no_index"> <option value="-1"><?php esc_html_e( '— No Change —', 'surerank' ); ?></option> <option value="yes"><?php esc_html_e( 'Yes', 'surerank' ); ?></option> <option value="no"><?php esc_html_e( 'No', 'surerank' ); ?></option> </select> </label> <label> <span class="title"><?php esc_html_e( 'No Follow -', 'surerank' ); ?></span> <select name="surerank_no_follow"> <option value="-1"><?php esc_html_e( '— No Change —', 'surerank' ); ?></option> <option value="yes"><?php esc_html_e( 'Yes', 'surerank' ); ?></option> <option value="no"><?php esc_html_e( 'No', 'surerank' ); ?></option> </select> </label> <label> <span class="title"><?php esc_html_e( 'No Archive -', 'surerank' ); ?></span> <select name="surerank_no_archive"> <option value="-1"><?php esc_html_e( '— No Change —', 'surerank' ); ?></option> <option value="yes"><?php esc_html_e( 'Yes', 'surerank' ); ?></option> <option value="no"><?php esc_html_e( 'No', 'surerank' ); ?></option> </select> </label> </div> </div> </div> </fieldset> <?php self::$fields_added = true; } /** * Save bulk edit settings for posts. * * @param int $post_id Post ID. * @param \WP_Post $post Post object. * @return void */ public function save_bulk_edit( int $post_id, \WP_Post $post ): void { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } // Check if this is a bulk edit request. if ( ! isset( $_REQUEST['bulk_edit'], $_REQUEST['post'], $_REQUEST['_wpnonce'] ) ) { return; } if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ), 'bulk-posts' ) ) { return; } // Ensure this post is part of the bulk edit. $post_ids = array_map( 'intval', (array) wp_unslash( $_REQUEST['post'] ) ); if ( ! in_array( $post_id, $post_ids, true ) ) { return; } $no_index = isset( $_REQUEST['surerank_no_index'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['surerank_no_index'] ) ) : '-1'; $no_follow = isset( $_REQUEST['surerank_no_follow'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['surerank_no_follow'] ) ) : '-1'; $no_archive = isset( $_REQUEST['surerank_no_archive'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['surerank_no_archive'] ) ) : '-1'; if ( '-1' !== $no_index ) { Helper::update_robot_meta( $post_id, 'post_no_index', $no_index, false ); } if ( '-1' !== $no_follow ) { Helper::update_robot_meta( $post_id, 'post_no_follow', $no_follow, false ); } if ( '-1' !== $no_archive ) { Helper::update_robot_meta( $post_id, 'post_no_archive', $no_archive, false ); } } }