投稿が互いに近づきすぎて公開されないようにするにはどうすればよいですか?


9

私は約25人のライターで構成されるブログを管理しています。時々それらのいくつかはすぐに新しい投稿を書いている最中で、彼らはお互いに近すぎてそれらを公開することになります。

これを防ぐ方法はありますか?「別の投稿が最後の5分以内に公開されました。あなたの投稿を公開するには55分待つ必要があります。」


3
私はそれが(オフトピックごとに明示的なプラグインの勧告ではありません、少し質問を変更する自由を取っよくある質問)。プラグインがある場合は、誰かがお勧めします。探しましたか?カスタムソリューションが必要になると思います。このサイトを調べましたか?
ブラソフィロ2013年

@brasofilo +1 ... aZn137(これはあなたのパスワードですか?)、pre_save_postまたはにフックしたい場合がありますsave_post。(プラグインのインストールを除いて)これまでに試したことの調査結果を教えてください。
カイザー2013年

ええ、私はしばらくグーグルで過ごしましたが、このようなトリックを行うプラグインは見つかりませんでした。自分でフックを作れるかもしれません。pre_save_postとsave_postを調べます。みんなありがとう。
Tam N.

回答:


8

以下に、非常に大まかなコードブロックを示します。最新の「将来」または「公開」の投稿を探し、その値が最新のスケジュールされた投稿と1時間未満異なる場合、現在の投稿を1時間プラス「見つかった最新」の時間にスケジュールします。

function force_time_between_posts_wpse_104677($data, $postarr) {
  global $wpdb;
  if (empty($postarr['ID'])) return $data;

  $latest = $wpdb->get_var("
    SELECT post_date
    FROM {$wpdb->posts} 
    WHERE post_status IN('future','publish') 
    AND post_type = 'post' 
    AND ID != {$postarr['ID']}
    ORDER BY post_date DESC
    LIMIT 1");
  $distance = 60; // post publication spacing in minutes
  $latest = strtotime($latest);
  $current = strtotime($data['post_date']);

  if ($latest < $current) {
    $diff = $current - $latest;
  } else { 
    $diff = 0;
  }

  if ($diff >= 0 && $diff < ($distance * 60)) {
    $new_date = $latest + ($distance * 60);
    $date = date('Y-m-d H:i:s',$new_date);
    $date_gmt = get_gmt_from_date($date);
    $data['post_date'] = $date;
    $data['post_date_gmt'] = $date_gmt;
    $data['post_status'] = 'future';
  }
  return $data;
}
add_action('wp_insert_post_data','force_time_between_posts_wpse_104677',1,2);

これは実際にポストのスケジューリングを強制します。すでに将来のポストがある場合、次のポストはすでにスケジュールされたポストの後にスケジュールされます。つまり、投稿を遠くまでスケジュールできる可能性があります。

事柄を管理しやすくするために、特定の役割をこのポストスケジュールから除外するか、単一の役割にのみ必要な場合があります。


どうもありがとうございました!私は先に進んで、私の開発ブログにあるfunction.phpファイルにスニペットを貼り付けました。それは完全に動作します。最初に投稿#1を公開し、その直後に2番目の投稿#2を作成しました。[公開]ボタンを押すと、投稿1が公開されてから60分後に投稿がスケジュールされました。私はそれを別の投稿#3でテストし、投稿#1と#2の間にライブになるように設定しました。投稿#2の1時間後に自動的に設定し直しました。これは完璧です。どうもありがとうございました!
Tam N.

うーん...バグがあります。比較するベースとして予定されている最新の投稿を常に取得します。たとえば、投稿#3は24時間の予定です。投稿4を12時間後に公開するようにスケジュールすると、投稿3の1時間後に常に設定されます。そうは言っても、これは私が続けるのに良いことです。とにかくありがとう!
Tam N.

1
バグではありません。私は答えでそれを説明しました。それはあなたが望むロジックではないかもしれませんが、それはバグではありません。それを行わない場合、1分間隔で公開された投稿は1分間隔で公開されますが、(おそらく)1時間遅れます。
s_ha_dum 2013年

ゴッチャ。予定されている投稿ではなく、すぐに公開される投稿のみが必要だと思います。スニペットをに変更した場合WHERE post_status IN('publish')、必要に応じて機能が向上すると思います。
Tam N.

1
あなたはそれを試すことができますが、いくつかの投稿が公開されたときに何が起こるかを考えてください。それらはすべて、最後に公開された投稿(おそらく同じ投稿)に基づいてスケジュールされます。つまり、公開しても、何もしなかった場合と同じ距離で公開されます。彼らはちょうど1時間後に公開されます。
s_ha_dum 2013年

0

このようなことをするAuto Future Dateという名前のリポジトリにプラグインがあります。しばらく更新されていませんが、ほとんどのコードはかなり便利なようです。

まだテストしていませんが、スクリーンショットを見ると、投稿を直接公開でき、save_postフックに自動的にくっつかないように見えます。このコードを正しいフックで動作させることで、うまくいくはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.