web-dev-qa-db-fra.com

Désactiver les rétroliens/pingbacks et les commentaires sur tous les sites multisites existants

Je veux tourner des rétroliens et des pingbacks. Existe-t-il un moyen de les désactiver sur toutes les publications et pages existantes sur tous les sites d'une installation multi-sites? Puis définissez l'option pour ne pas autoriser les rétroliens et les pings dans le paramétrage de chaque site existant.

1
david

Ce code a été testé dans un multisite de test local. Cela semble correct, mais j'ai trouvé un petit problème mineur:
- après l'avoir exécuté, tous les brouillons/messages en attente disparaissent de la page de liste, mais réapparaissent après une actualisation, aucune idée pourquoi ...

Bien que je pense que c'est assez inoffensif, veuillez sauvegarder votre base de données avant d'exécuter cette opération.

/*
 * Turn off trackback/pingbacks and comments on all existing multisite sites
 *
 * Important: Run Only Once, visit any admin page and delete/disable the hook 
 * 
 */
add_action('admin_init','wpse_55209_run_only_once');
function wpse_55209_run_only_once()
{   
    global $wpdb;
    $blogs = $wpdb->get_results("
        SELECT blog_id
        FROM {$wpdb->blogs}
        WHERE site_id = '{$wpdb->siteid}'
        AND spam = '0'
        AND deleted = '0'
        AND archived = '0'
        AND mature = '0' 
        AND public = '1'
    ");

    foreach ($blogs as $blog) 
    {
        update_blog_option($blog->blog_id, 'default_ping_status', 'closed');
        update_blog_option($blog->blog_id, 'default_pingback_flag', 'closed');
        update_blog_option($blog->blog_id, 'default_comment_status', 'closed');
        switch_to_blog( $blog->blog_id );
        $wpdb->set_blog_id($blog->blog_id);
        $allposts = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_status != 'inherit'" );
        foreach( $allposts as $pt )
        {
            $my_post = array();
            $my_post['ID'] = $pt->ID;
            $my_post['comment_status'] = 'closed';
            $my_post['ping_status'] = 'closed';
            wp_update_post( $my_post );
        }
    }
}
1
brasofilo