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.