En la actualización de red de MultiSite "No se puede resolver el host", anule y continúe actualizando

4

Cuando se ejecuta el script de actualización de red de WordPress, si llega a un sitio que "no se puede resolver", el script se detiene allí y ningún sitio se actualiza. Por lo tanto, si hay 1 sitio en una instalación de MultiSite de 1000 sitios que no se resolverá (es decir, el dominio caducó), no podrá implementar la actualización en ningún sitio de su red. Por supuesto, puede ingresar al administrador de la red y eliminar el sitio, pero a veces no tiene tiempo o sabe que el dominio se renovará (especialmente si es su propio dominio).

Una vez me señalaron una solución para esto. Pero, por desgracia, ninguna búsqueda en Google me ha ayudado a encontrarlo nuevamente.

¿Alguien sabe cómo lograr esto?

    
pregunta TheLoneCuber 14.05.2012 - 05:27

1 respuesta

1

Yo diría que no es posible engancharse a eso ...

Aquí está la parte relevante de /wp-admin/network/upgrade.php :

$blogs = $wpdb->get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A );
if ( empty( $blogs ) ) {
    echo '<p>' . __( 'All done!' ) . '</p>';
    break;
}
echo "<ul>";
foreach ( (array) $blogs as $details ) {
    $siteurl = get_blog_option( $details['blog_id'], 'siteurl' );
    echo "<li>$siteurl</li>";
    $response = wp_remote_get( trailingslashit( $siteurl ) . "wp-admin/upgrade.php?step=upgrade_db", array( 'timeout' => 120, 'httpversion' => '1.1' ) );
    if ( is_wp_error( $response ) )
        wp_die( sprintf( __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: <em>%2$s</em>' ), $siteurl, $response->get_error_message() ) );
    do_action( 'after_mu_upgrade', $response );
    do_action( 'wpmu_upgrade_site', $details[ 'blog_id' ] );
}

Pero a partir de eso podemos hacer una pequeña herramienta para enumerar todos los blogs muertos.
Y una opción para desactivar cada uno * .

* Copiado desde /wp-admin/includes/class-wp-ms-sites-list-table.php .

add_action('wp_network_dashboard_setup','wpse_52040_network_dashboard_setup');functionwpse_52040_network_dashboard_setup(){wp_add_dashboard_widget('wpse_52040_dead_blogs_widget',__('Deadblogs'),'wpse_52040_dead_blogs');}functionwpse_52040_dead_blogs(){global$wpdb;$blogs=$wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE  spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC, 5", ARRAY_A ) );

    if ( empty( $blogs ) ) 
    {
        echo '<p>No blogs!</p>';
        break;
    }

    echo "<ul>";
    foreach ( (array) $blogs as $details ) 
    {
        $siteurl = get_blog_option( $details->blog_id, 'siteurl' );
        $response = wp_remote_get( trailingslashit( $siteurl ) . "wp-admin/", array( 'timeout' => 120, 'httpversion' => '1.1' ) );
        if ( is_wp_error( $response ) )
        {
            $error = $response->get_error_message();
            echo "<li><strong>$siteurl</strong><br />";
            echo '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&amp;action2=deactivateblog&amp;id=' . $details->blog_id . '&amp;msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $details->domain ) ) ), 'confirm') ) . '">' . __( 'Deactivate' ) . '</a></span><br />';
            echo "Response -&gt; $error</li>";
        }
    }
   echo "</ul>";
}
    
respondido por el brasofilo 22.10.2012 - 12:59

Lea otras preguntas en las etiquetas