web-dev-qa-db-ja.com

既存のすべてのマルチサイトサイトでトラックバック/ pingbackとコメントをオフにする

トラックバックとピングバックを有効にしたい。マルチサイトインストール内のすべてのサイトのすべての既存の投稿とページでそれらを無効にする方法はありますか?次に、既存の各サイトの設定でトラックバックとピングバックを許可しないようにオプションを設定しますか。

1
david

このコードはローカルテストMultisiteでテストされています。大丈夫に思えるが、マイナーな不具合が見つかりました。
- 実行するとすべてのドラフト/保留中の投稿がリストページから消えますが、更新後に再び表示されます。理由はわかりません.

無害だと思いますが、データベースをバックアップしてから実行してください。

/*
 * 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