关闭所有现有多站点站点上的trackback/pingback和评论

时间:2012-06-14 作者:david

我想转向trackbacks和pingbacks。有没有办法在多站点安装中的所有站点上的所有现有帖子和页面上关闭它们?然后将选项设置为不允许在每个现有站点的设置中使用trackback和pingsback?

1 个回复
SO网友:brasofilo

该代码在本地多站点测试中进行了测试。看起来还可以,但发现了一个小问题:
-运行后,所有草稿/挂起的帖子都会从列表页中消失,但刷新后会再次出现,不知道为什么。。。

虽然我相信这是无害的,但请在运行此之前备份您的数据库

/*
 * 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 );
        }
    }
}

结束

相关推荐

在MultiSite中的循环外部获取_Author_meta的$user_id

因此,我目前正在运行一个多站点安装,超级管理员将创建所有新站点。我们使用的其中一个模板有一个贷款官员的博客页面。我正在扩展用户配置文件,以便新用户可以输入需要在其页面上显示的关键数据。除了创建站点时自动添加的超级管理员之外,每个站点只有一个用户。我发现,如果要使用该函数,需要指定用户IDthe_author_meta(); 循环外部。这是我的问题。我无法在模板中输入ID,因为每个新的贷款官员都将使用相同的主题模板。那么,如何使这些字段成为动态的呢?下面是配置文件部分的图像,以便LO在视觉上有所帮