web-dev-qa-db-fra.com

Comment informer l'administrateur de quelque chose qui s'est passé pendant un travail cron

Notre société a mis en place un plugin Wordpress qui utilise notre API de contenu. Le problème, c'est qu'une partie du contenu s'en va. Parfois pour un temps, parfois pour toujours. Pour être sûr du point de vue juridique, nous devons faire en sorte que le contenu supprimé sur notre page doive également être supprimé du côté des utilisateurs du plug-in.

Pour ce faire, nous vérifions une tâche mensuelle avec un travail cron, puis définissons le contenu importé sur "brouillon" afin que le propriétaire du site ne perde pas le contenu qu'il aurait lui-même ajouté.

Il peut republier le contenu, mais c'est son problème s'il y a un problème juridique.

Quoi qu'il en soit: comment informer au mieux le propriétaire de la page que nous avons paramétré certaines de ses pages sur "brouillon"? J'ai consulté les avis de l'administrateur, mais ceux-ci semblent être principalement des messages courts et immédiats du type "Vos paramètres ont été enregistrés".

Quel est un bon moyen d'informer le propriétaire du site "D'accord, cela s'est passé pendant votre absence, vous devrez peut-être examiner la question"?

1
Sorcy

J'ai fait quelque chose de similaire en signalant des problèmes d'ingestion de contenu. Je vous déconseille d'envoyer des courriers électroniques à partir d'un cron, à moins que ce soit sous forme de résumé à partir d'un intervalle de temps spécifié, car vous risqueriez de fatiguer les courriers électroniques assez rapidement.

J'ai créé une file d'attente dans un type de publication distinct lié à la publication signalée ou juste levé un indicateur pour un problème sans publication. À partir de là, les éditeurs peuvent résoudre un problème (le supprimer) ou le marquer comme prévu (défini sur custom post_status of 'attendu') afin que le problème ne reste pas récurrent si des règles sont configurées pour intercepter d'autres publications de même problème.

Bien que je ne puisse pas vous donner le code pour le plugin propriétaire, voici les étapes que j'ai suivies:

1. Créer un type d'article pour les indicateurs de contenu

2. Redirige les nouvelles publications manuelles vers edit.php et supprime l'élément de sous-menu pour l'ajout de publications

Nous voulons seulement que cron crée ces publications et non les utilisateurs.

add_action( 'init', 'redirect_new_flag_post' );
function redirect_new_flag_post (){
  global $pagenow;
  if( $pagenow === 'post-new.php' && isset( $_GET['post_type'] ) && $_GET['post_type'] === 'YOUR_POST_TYPE' ){
    wp_redirect( '/wp/wp-admin/edit.php?post_type=YOUR_POST_TYPE' );
    die();
  }
}
add_action( 'admin_menu', 'remove_flag_menu_items' );
function remove_menu_items (){
    remove_submenu_page( 'edit.php?post_type=YOUR_POST_TYPE', 'post-new.php?post_type=YOUR_POST_TYPE' );
}

3. Créez des colonnes personnalisées pour edit.php pour votre type d'article personnalisé. Jetez un coup d'œil à ce message pour plus d'informations.

  • Titre de poste marqué
  • URL de publication marquée
  • Signalé par
  • Rendez-vous amoureux
  • Actions (Marquer comme résolu (Corbeille), Liste blanche comme prévu (défini sur post_status attendu)) - J'ai créé des boutons avec les appels associés AJAX

4. Ajoutez des méta-boîtes à votre type de message personnalisé

Informations sur le poste marqué

  • Titre de l'article
  • URL
  • Type de poste
  • Rendez-vous amoureux
  • Signalé par (quel processus cron)
  • Message - Cela peut décrire pourquoi le message a été marqué
  • Données brutes (objet entier à ingérer)

Actions de résolution

  • J'ai supprimé toutes les WP post actions via CSS pour afficher uniquement mes actions de résolution.
  • Marquer comme résolu (le supprimer)
  • Marquer comme liste blanche (définissez-le sur privé)

5. Créer un avis d'administrateur sur le poste marqué

  • Vérifiez si vous êtes sur le type de message correct
  • Vérifier s'il existe un drapeau qui pointe vers ce poste
  • Si tel est le cas, créez un avis d'erreur d'administration qui avertit l'éditeur qu'il existe un indicateur et un lien vers la publication d'indicateur de contenu pour la résolution.
  • Utilisez le hook admin = admin_notices pour afficher votre message.

6. Créer une classe de modèle de drapeau

  • Ajouter un nouveau drapeau - Ceci peut être appelé à partir de votre code cron
  • Indicateur de résolution (supprimer)
  • Défini comme prévu (définissez post_status sur 'prévu')
  • Clair prévu

Vous pouvez créer une classe similaire à ceci:

class Flags{
    public function add( $post_id, $title, $desc, $meta_data = array(), $flagger = 'cron' ){
        // Deduplicate flag
        // Insert flag
    }

    public function resolve( $post_id ){
        // Delete post via ID
    }

    public function save( $post_id ){
        // Set post_status to 'expected'
    }

    public function clear_saved( $post_id ){
        self::resolve( $post_id );
    }
}

7. Signaler le contenu de votre script cron

Dans votre script, vous pouvez définir une structure de contrôle pour identifier les publications qui doivent être marquées (c’est-à-dire que la publication n’a pas été insérée correctement, que du contenu est absent du CMS d'origine, etc.). Ces publications doivent être signalées à l'aide de votre classe Flag:

Flags::add(
    $post_id,
    'Lorem Ipsum',
    'This is why this post is getting flagged',
    array( 'raw_data' => $content_object )
);

8. Créer un résumé de courrier électronique

Je créerais un script cron distinct pour interroger les derniers indicateurs de contenu et envoyer un résumé à l'administrateur à intervalles réguliers. Il serait utile pour l'administrateur de recevoir un lien vers le problème, de consulter les données brutes et de pouvoir résoudre le problème manuellement plutôt que d'essayer de déboguer sans données.

9. Collecte des ordures

Cette approche a fonctionné à notre guise, mais les indicateurs de contenu "Attention" peuvent s’empiler rapidement si vous importez beaucoup de données. Vous devrez exécuter un script de récupération de place pour les anciens indicateurs si vous constatez que votre administrateur ne résout pas les problèmes. Vous devrez peut-être également identifier des modèles de règles trop strictes pour l'ajout d'indicateurs de contenu s'ils sont systématiquement ignorés.

1
Brian Fegter