web-dev-qa-db-ja.com

Cronジョブ中に発生したことを管理者に通知する方法

私達の会社は私達の内容APIを消費するWordpressの差込を出した。問題は、コンテンツの一部が消えてしまうことです。時々、時には永遠に。法的に安全な側になるためには、私たちのページから削除されたコンテンツは、プラグインユーザー側でも削除する必要があることを強制する必要があります。

私たちは月に一度クーロンの仕事をチェックしてからサイトの所有者が自分で追加したかもしれないコンテンツを失うことがないようにインポートされたコンテンツを "ドラフト"に設定することによってこれを行います。

彼はそのコンテンツを再公開することができますが、法的な問題がある場合はそれが彼の問題です。

とにかく、私たちが彼のページのいくつかを "ドラフト"に設定したことをページの所有者にどのように通知するのが一番良いのでしょうか?私は管理者への通知を調べましたが、それらは主に "あなたの設定は保存されました"のような短くて即座のメッセージのためのようです。

サイトの所有者に通知するための良い方法は何ですか?「さて、これはあなたが行っている間に起こったのです、あなたはそれを調べる必要があるかもしれません」

1
Sorcy

私は同様のことをして、コンテンツの摂取に関する問題を指摘しています。あなたはかなり早く電子メールの疲れを得るので、私はそれが指定された時間間隔からのダイジェスト形式でない限り、クーロンから電子メールを送ることに対して警告するでしょう。

フラグが設定された投稿にリンクしている、または投稿がない問題にフラグを立てた別の投稿タイプで種類のキューを作成しました。そこから、編集者は問題を解決する(削除する)か、または期待通りにマークする( 'expected'のカスタムpost_statusに設定する)ことができます。

私はあなたにプロプライエタリなプラグインのためのコードベースを与えることができませんが、ここに私が取ったステップがあります:

1。コンテンツフラグの投稿タイプを作成する

2。新しい手動投稿をedit.phpにリダイレクトし、投稿を追加するためのサブメニュー項目を削除します

Cronがこれらの投稿を作成するだけで、ユーザーは作成しないようにします。

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。カスタム投稿タイプのedit.phpのカスタム列を作成します。詳しくは この投稿 をご覧ください。

  • フラグ付き投稿のタイトル
  • フラグ付き投稿URL
  • によってフラグを立てられる
  • 日付
  • アクション(解決済みとしてマーク(ゴミ箱)、ホワイトリストを期待どおりに設定( 'expected' post_statusに設定)) - AJAX呼び出しに関連付けられたボタンを作成しました

4。カスタム投稿タイプにメタボックスを追加する

フラグ付き投稿情報

  • 記事のタイトル
  • URL
  • 投稿タイプ
  • 日付
  • によってフラグを立てられる(どのcronプロセス)
  • メッセージ - 投稿にフラグが立てられた理由を説明できます
  • 生データ(取り込まれる予定のオブジェクト全体)

解決アクション

  • 解決アクションのみを表示するために、CSSを介してWP投稿アクションをすべて削除しました
  • 解決済みとしてマーク(削除)
  • ホワイトリストとしてマーク(プライベートに設定)

5。フラグ付きの投稿に管理者通知を作成する

  • あなたが正しい投稿タイプであるか確認してください
  • その投稿を指すフラグが存在するかどうかを確認してください
  • そうであれば、エラー管理通知を作成して、フラグがあることをエディターに警告し、解決のためにコンテンツフラグの投稿にリンクします。
  • メッセージを出力するには admin_notices フックを使用してください。

6。 Flagモデルクラスを作成する

  • 新しいフラグを追加 - これはあなたのcronコードから呼び出すことができます
  • 解決フラグ(削除)
  • 期待値を設定します(post_statusを 'expected'に設定します)。
  • クリア予定

これに似たクラスを作成することができます。

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。 cronスクリプトからコンテンツにフラグを立てる

スクリプト内で、フラグを立てる必要がある投稿を識別するための制御構造を定義できます(つまり、投稿が正しく挿入されなかった、コンテンツがOrigin CMSから欠落している、など)。これらの投稿には、Flagクラスを使用してフラグを立てる必要があります。

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

8。メールダイジェストを作成する

最新のコンテンツフラグを照会し、一定の間隔でダイジェストを管理者に送信するための個別のcronスクリプトを作成します。管理者にとって、問題へのリンクを受信し、生データを参照し、データなしでデバッグするのではなく手動で問題を解決できることは有益です。

9。ガベージコレクション

このアプローチはうまくいきましたが、大量のデータを摂取している場合は、コンテンツのフラグをすぐに積み上げることができます。管理者が問題を解決していないことがわかった場合は、古いフラグに対してガベージコレクションスクリプトを実行する必要があります。また、一貫して無視される場合は、コンテンツフラグを追加するための非常に厳格なルールのパターンを識別する必要があるかもしれません。

1
Brian Fegter