web-dev-qa-db-ja.com

投稿が互いに近くなりすぎないようにするにはどうすればよいですか。

私は約25人の作家からなるブログを管理しています。時にはそれらのいくつかはすぐに新しい記事を書く過程にあり、そして彼らはあまりにも近くにそれらを公開することになってしまいます。

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

8
Tam N.

ここにあなたが始めるべきであるコードの非常に大まかなブロックがあります。それは、最新の「将来」または「公開」の投稿を探すことであり、その値が最新のスケジュールされた投稿と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);

これは実際には強制的にポストスケジューリングを行い、すでに未来のポストがあれば次のポストを行います。すでに予定されている投稿の後に予定されます。それはそれが潜在的にはるかに将来のポストを予定することができることを意味します。

物事を管理しやすくするために、特定の役割をこの事後計画から除外することも、単一の役割だけに要求することもできます。

7
s_ha_dum

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

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

0
Coen Jacobs