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