Cambiar la etiqueta ‘robots’ de Rank Math a todo un post type

    RankMath te permite editar la etiqueta robots en lote solo con la versión premium. Con este código fuente, puedes elegir el tipo de publicación y modificar todas las etiquetas a index o no index con un solo clic. Añade el shortcode a la página que desees.

    function eg_shortcode_actualizar_rankmath_robots() {
        // Obtén todos los post types públicos
        $post_types = get_post_types(array('public' => true), 'objects');
    
        // Si se ha enviado el formulario para elegir el post type
        if (isset($_POST['post_type_seleccionado'])) {
            $post_type_seleccionado = sanitize_text_field($_POST['post_type_seleccionado']);
            $nuevo_estado = sanitize_text_field($_POST['nuevo_estado']);
    
            // Determinar el valor de la indexación a buscar
            $valor_a_buscar = ($nuevo_estado === 'index') ? 'noindex' : 'index';
    
            // Busca todos los posts del post type seleccionado que tengan el estado deseado o que no tengan la meta
            $posts = get_posts(array(
                'post_type' => $post_type_seleccionado,
                'post_status' => 'publish',
                'posts_per_page' => -1,
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key' => 'rank_math_robots',
                        'value' => ':"' . $valor_a_buscar . '"',
                        'compare' => 'LIKE'
                    ),
                    array(
                        'key' => 'rank_math_robots',
                        'compare' => 'NOT EXISTS' // Incluye posts sin este campo
                    )
                )
            ));
    
            $total_posts = count($posts);
    
            // Si no se encuentran posts para editar
            if ($total_posts === 0) {
                $mensaje = "No se encontraron posts en '$post_type_seleccionado' con estado '$valor_a_buscar'.";
                $formulario = mostrar_formulario($post_types, $post_type_seleccionado, $nuevo_estado);
                return "<p>$mensaje</p>$formulario";
            }
    
            // Mensaje de posts encontrados
            $mensaje = "<p>Número total de posts para editar: $total_posts.</p>";
    
            // Actualizar posts si se ha confirmado
            if (isset($_POST['confirmar_actualizacion'])) {
                foreach ($posts as $post) {
                    // Obtener los metadatos existentes
                    $robots_meta = get_post_meta($post->ID, 'rank_math_robots', true);
                    $robots_meta = is_array($robots_meta) ? $robots_meta : []; // Asegurarse de que sea un array
    
                    // Cambiar solo el valor de indexación
                    $robots_meta[0] = ($nuevo_estado === 'index') ? 'index' : 'noindex';
    
                    // Guardar el nuevo valor, ignorando noarchive
                    update_post_meta($post->ID, 'rank_math_robots', $robots_meta);
                }
                return $mensaje . " Número total de posts editados en '$post_type_seleccionado': $total_posts.";
            }
    
            // Formulario de confirmación
            return $mensaje . "<form method='post'>
                        <input type='hidden' name='post_type_seleccionado' value='" . esc_attr($post_type_seleccionado) . "'>
                        <input type='hidden' name='nuevo_estado' value='" . esc_attr($nuevo_estado) . "'>
                        <input type='submit' name='confirmar_actualizacion' value='Confirmar actualización'>
                    </form>";
        }
    
        // Formulario inicial para elegir el post type y el nuevo estado
        return mostrar_formulario($post_types);
    }
    
    function mostrar_formulario($post_types, $post_type_seleccionado = '', $nuevo_estado = '') {
        $formulario = "<form method='post'>
                           <label for='post_type_seleccionado'>Selecciona el Post Type:</label>
                           <select name='post_type_seleccionado' id='post_type_seleccionado'>
                           <option value=''>-- Seleccione --</option>";
    
        foreach ($post_types as $post_type) {
            $selected = ($post_type->name === $post_type_seleccionado) ? 'selected' : '';
            $formulario .= "<option value='" . esc_attr($post_type->name) . "' $selected>" . esc_html($post_type->labels->singular_name) . "</option>";
        }
    
        $formulario .= "</select>
                        <br>
                        <label for='nuevo_estado'>Selecciona el nuevo estado:</label>
                        <select name='nuevo_estado' id='nuevo_estado'>
                            <option value='index' " . selected($nuevo_estado, 'index', false) . ">Cambiar a Index</option>
                            <option value='noindex' " . selected($nuevo_estado, 'noindex', false) . ">Cambiar a Noindex</option>
                        </select>
                        <br>
                        <input type='submit' value='Ver posts a editar'>
                    </form>";
    
        return $formulario;
    }
    
    add_shortcode('actualizar_index_posts', 'eg_shortcode_actualizar_rankmath_robots');

    Herramientas relacionadas

    • Rank Math

      Uno de los mejores plugins de SEO para WordPress.