Come impedire che i post vengano pubblicati troppo vicini l'uno all'altro?


9

Gestisco un blog composto da circa 25 scrittori. A volte alcuni di loro sono in procinto di scrivere un nuovo post in una volta e finiscono per pubblicarli troppo vicini.

C'è un modo per impedire che ciò accada? Qualcosa da dire "Un altro post è appena stato pubblicato negli ultimi 5 minuti. Dovrai attendere 55 minuti per pubblicare i tuoi".


3
Mi sono preso la libertà di modificare leggermente la domanda, quindi non è una raccomandazione esplicita del plug-in (fuori tema per le domande frequenti ). Se c'è un plugin, qualcuno lo consiglierà. Ne hai cercato uno? Penso che sarà necessaria una soluzione personalizzata. Hai cercato questo sito?
brasofilo,

@brasofilo +1 ... aZn137 (questa è la tua password?), potresti voler agganciare pre_save_posto save_post. Puoi mostrarci alcune ricerche su ciò che hai provato finora (oltre all'installazione di plugin).
Kaiser

Sì, ho passato un po 'di tempo su Google, ma non ho trovato alcun plugin che farebbe questo tipo di trucco. Potrei essere in grado di cucinare il mio gancio. Esaminerò pre_save_post e save_post. Grazie ragazzi.
Tam N.

Risposte:


8

Ecco un blocco di codice molto approssimativo che dovrebbe iniziare. Ciò che cerca è cercare il post "futuro" o "pubblica" più recente e se quel valore è inferiore a 1 ora diverso dall'ultimo post programmato, pianifica il post corrente su un'ora più il tempo "più recente" trovato.

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

Questo in effetti vigore la programmazione posta, e se c'è già un prossimo post la prossima sarà programmata dopo che il post già in programma. Ciò significa che potrebbe potenzialmente pianificare post in futuro.

Potresti voler esentare determinati ruoli dalla pianificazione di questo post o richiederlo solo per un singolo ruolo, solo per aiutare a mantenere le cose gestibili.


Grazie mille! Sono andato avanti e ho incollato lo snippet nel mio file function.php sul mio blog di sviluppo. Funziona perfettamente. Prima ho pubblicato un post n. 1, quindi ho realizzato un secondo post n. 2 subito dopo. Quando ho premuto il pulsante "Pubblica", il post è stato programmato per 60 minuti da quando il post n. 1 è stato pubblicato. L'ho provato con un altro post n. 3, impostandolo per essere pubblicato tra il post n. 1 e il n. 2, lo riporta automaticamente a 1 ora dopo il post n. 2. Questo è perfetto. Grazie mille!
Tam N.

Hmmm ... quindi c'è un bug. Afferra sempre l'ultimo post programmato come base da confrontare. Supponiamo che il post n. 3 sia programmato per 24 ore. Quando pianifico che il post n. 4 venga pubblicato tra 12 ore, il tempo impostato sarà sempre 1 ora dopo il post n. 3. Detto questo, va bene per me continuare. Grazie comunque!
Tam N.

1
Non è un bug. L'ho spiegato nella risposta. Potrebbe non essere la logica che desideri, ma non è un bug. Se non lo fai, i post pubblicati a distanza di un minuto pubblicheranno comunque a distanza di un minuto, sebbene (forse) in ritardo di un'ora.
s_ha_dum,

Gotcha. Suppongo di dover pubblicare solo post che verranno pubblicati immediatamente, non quelli programmati. Se avessi modificato lo snippet WHERE post_status IN('publish'), credo che funzionerebbe meglio per ciò di cui ho bisogno.
Tam N.

1
Puoi provarlo ma pensa a cosa succede quando vengono pubblicati diversi post. Saranno tutti programmati in base all'ultimo post pubblicato, probabilmente lo stesso post, il che significa che quando pubblicheranno pubblicheranno comunque la stessa distanza nel tempo come se non avessero fatto. Sarebbero stati pubblicati solo un'ora dopo.
s_ha_dum,

0

C'è un plugin nel repository chiamato Auto Future Date che fa qualcosa del genere. Non è stato aggiornato per un po ', ma la maggior parte del codice sembra abbastanza utile.

Non l'ho provato, ma gli screenshot fanno sembrare che tu possa ancora pubblicare direttamente il post e non attaccare save_postautomaticamente all'amo. Far funzionare questo codice con i ganci giusti dovrebbe fare il trucco.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.