Wie kann verhindert werden, dass Beiträge zu nahe beieinander veröffentlicht werden?

9

Ich verwalte einen Blog, der aus ungefähr 25 Autoren besteht. Manchmal sind einige von ihnen dabei, sofort einen neuen Beitrag zu schreiben, und am Ende veröffentlichen sie sie zu nahe beieinander.

Gibt es eine Möglichkeit, dies zu verhindern? Etwas zu sagen "Ein weiterer Beitrag wurde in den letzten 5 Minuten online gestellt. Sie müssen 55 Minuten warten, um Ihren zu veröffentlichen."

Tam N.
quelle
3
Ich habe mir erlaubt, die Frage leicht zu ändern, daher handelt es sich nicht um eine explizite Plugin-Empfehlung (Off-Topic gemäß FAQ ). Wenn es ein Plugin gibt, wird es jemand empfehlen. Hast du nach einem gesucht? Ich denke, eine kundenspezifische Lösung wird notwendig sein. Haben Sie diese Seite recherchiert?
Brasofilo
@brasofilo +1 ... aZn137 (ist dies Ihr Passwort?), möchten Sie vielleicht in pre_save_postoder einbinden save_post. Können Sie uns einige Nachforschungen darüber zeigen, was Sie bisher versucht haben (abgesehen von der Installation von Plugins)?
kaiser
Ja, ich habe einige Zeit mit Googeln verbracht, aber kein Plugin gefunden, das diesen Trick ausführen könnte. Ich kann vielleicht meinen eigenen Haken kochen. Ich werde in pre_save_post und save_post schauen. Danke Leute.
Tam N.

Antworten:

8

Hier ist ein sehr grober Codeblock, mit dem Sie beginnen können. Es wird nach dem neuesten "zukünftigen" oder "veröffentlichten" Beitrag gesucht. Wenn dieser Wert weniger als 1 Stunde vom letzten geplanten Beitrag abweicht, wird der aktuelle Beitrag auf eine Stunde plus der "letzten" gefundenen Zeit geplant.

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);

Dies gilt in der Tat Kraft die Post Scheduling und wenn es bereits eine Zukunft der nächste Post wird nach der bereits geplanten Post geplant werden. Dies bedeutet, dass möglicherweise Posts weit in die Zukunft geplant werden könnten.

Möglicherweise möchten Sie bestimmte Rollen von dieser Nachplanung ausnehmen oder sie nur für eine einzelne Rolle benötigen, um die Verwaltung zu gewährleisten.

s_ha_dum
quelle
Vielen Dank! Ich habe das Snippet in meine function.php-Datei eingefügt, die sich in meinem Entwicklungsblog befindet. Es funktioniert perfekt. Zuerst habe ich einen Beitrag Nr. 1 veröffentlicht, dann habe ich gleich danach einen zweiten Beitrag Nr. 2 verfasst. Als ich auf die Schaltfläche "Veröffentlichen" geklickt habe, wurde der Beitrag auf 60 Minuten ab dem Zeitpunkt eingestellt, an dem Beitrag Nr. 1 online ging. Ich habe es mit einem anderen Beitrag Nr. 3 getestet und es so eingestellt, dass es zwischen Beitrag Nr. 1 und Nr. 2 live geschaltet wird. Es wurde automatisch auf 1 Stunde nach Beitrag Nr. 2 zurückgesetzt. Dies ist perfekt. Vielen Dank!
Tam N.
Hmmm ... also gibt es einen Fehler. Es wird immer der neueste Beitrag abgerufen, der als Vergleichsbasis geplant ist. Angenommen, Post 3 ist für 24 Stunden geplant. Wenn ich vorstelle, dass Post Nr. 4 in 12 Stunden live geschaltet wird, wird die Zeit immer auf 1 Stunde nach Post Nr. 3 festgelegt. Das heißt, das ist gut für mich, weiterzumachen. Danke trotzdem!
Tam N.
1
Kein Fehler. Das habe ich in der Antwort erklärt. Es ist vielleicht nicht die Logik, die Sie wollen, aber es ist kein Fehler. Wenn Sie dies nicht tun, werden Posts, die im Abstand von einer Minute veröffentlicht wurden, immer noch im Abstand von einer Minute veröffentlicht, obwohl sie (möglicherweise) um eine Stunde verzögert sind.
s_ha_dum
Erwischt. Ich nehme an, ich muss nur Beiträge veröffentlichen, die sofort online gehen, keine geplanten. Wenn ich das Snippet so ändern würde WHERE post_status IN('publish'), dass es funktioniert, würde es meiner Meinung nach besser für das funktionieren, was ich brauche.
Tam N.
1
Sie können das versuchen, aber überlegen Sie, was passiert, wenn mehrere Beiträge veröffentlicht werden. Sie werden alle basierend auf dem zuletzt veröffentlichten Beitrag geplant - wahrscheinlich dem gleichen Beitrag -, was bedeutet, dass sie bei der Veröffentlichung immer noch den gleichen zeitlichen Abstand veröffentlichen, den sie hätten, wenn Sie nichts getan hätten. Sie würden erst eine Stunde später veröffentlicht.
s_ha_dum
0

Es gibt ein Plugin im Repository namens Auto Future Date, das so etwas macht. Es wurde seit einiger Zeit nicht mehr aktualisiert, aber der größte Teil des Codes scheint ziemlich nützlich zu sein.

Ich habe es nicht getestet, aber die Screenshots lassen es so aussehen, als könnten Sie den Beitrag immer noch direkt veröffentlichen und nicht save_postautomatisch am Haken bleiben . Es sollte ausreichen, diesen Code mit den richtigen Hooks zum Laufen zu bringen.

Coen Jacobs
quelle