Je dois annuler la publication (c’est-à-dire, la brouillon) de plusieurs publications d’un site, mais dans un laps de temps déterminé (c’est-à-dire qu’elles ne veulent pas que toutes les publications soient inédites, mais à des dates précises).
Dans ce cas, la date est essentiellement celle de tout article d'avril 2017 ou d'une version antérieure, qui devrait être définie pour être brouillon.
Voici le script que je commence avec ma base et l'approche que j'ai adoptée jusqu'à présent. J'ajoute une option "ajouter une action" dans ce fichier "wp-includes/plugin.php." Comment cibler une publication dans une plage de dates?
add_action('admin_ini','custom_function');
function custom_function(){
$args = array('post_type'=> 'post',
'post_status' => 'publish',
'posts_per_page'=>-1
);
$published_posts = get_posts($args);
foreach($published_posts as $post_to_draft){
$query = array(
'ID' => $post_to_draft->ID,
'post_status' => 'draft',
);
wp_update_post( $query, true );
}
}
Vous pouvez le faire sans écrire de code en utilisant WP CLI en enchaînant 2 commandes:
draft
Nous pouvons utiliser wp post list
pour le faire, et nous en aurons besoin comme identifiants de publication pour les transmettre à la commande suivante. Plus de détails sur cette commande ici .
Par exemple, nous pouvons récupérer tous les articles de 2017 comme ceci:
wp post list --year="2017" --format=ids
Et tous les messages d'avril comme ceci:
wp post list --year="2017" --month="4" --format=ids
De cette façon, nous pouvons exécuter cette commande pour chaque mois de 2017 et chaque année précédent, et transmettre le résultat à la commande suivante.
Nous pouvons le faire avec wp post update 123
où 123 est l'ID du message à modifier
wp post update 123 --post_status="draft"
Nous allons donc définir tous les messages en 2016 pour rédiger:
wp post update $(wp post list --year="2016" --format=ids) --post_status="draft"
Et 2015:
wp post update $(wp post list --year="2015" --format=ids) --post_status="draft"
Et 2014:
wp post update $(wp post list --year="2014" --format=ids) --post_status="draft"
etc
admin_init
hook ralentira le processus. S'il ne peut pas terminer ce qu'il est en train de faire avant la limite de temps impartie, votre site ne chargera jamais WP Adminwp-includes
ou wp-admin
. Toutes vos modifications seront écrasées lorsque WP sera mis à jour. C'est une recette pour un désastre. En 2012, un site piraté a publié des données sur les clients et lui a valu une amende de plusieurs millions de dollars, car ils avaient modifié WP Core au lieu d'utiliser des thèmes et des plugins, mais ne pouvaient pas le mettre à jour pour obtenir une nouvelle sécurité corrige et pensa que ce n'était pas graveWP_Query
au lieu de get_posts
, il utilise le cache par défaut et est plus proche d'une boucle de publication réelle.pre_get_posts
pour masquer les publications avant avril 2017 (votre problème est résolu, mais ce n'est pas ce que vous avez demandé)