Bagaimana mencegah agar tulisan tidak dipublikasikan terlalu dekat?

9

Saya mengelola sebuah blog yang terdiri dari sekitar 25 penulis. Terkadang beberapa dari mereka sedang dalam proses menulis posting baru sekaligus, dan mereka akhirnya menerbitkannya terlalu dekat satu sama lain.

Apakah ada cara untuk mencegah hal ini terjadi? Sesuatu untuk dikatakan "Posting lain baru tayang dalam 5 menit terakhir. Anda harus menunggu 55 menit untuk mempublikasikan posting Anda."

Tam N.
sumber
3
Saya mengambil sedikit kebebasan untuk memodifikasi Pertanyaan, jadi ini bukan rekomendasi plugin yang eksplisit (di luar topik per faq ). Jika ada plugin, seseorang akan merekomendasikan. Sudahkah Anda mencari satu? Saya pikir solusi khusus akan diperlukan. Sudahkah Anda meneliti situs ini?
brasofilo
@brasofilo +1 ... aZn137 (apakah ini kata sandi Anda?), Anda mungkin ingin masuk pre_save_postatau save_post. Bisakah Anda menunjukkan kepada kami beberapa penelitian tentang apa yang telah Anda coba sejauh ini (selain menginstal plugin).
kaiser
Ya, saya telah menghabiskan beberapa waktu di Google, tetapi belum menemukan plugin yang akan melakukan trik ini. Saya mungkin bisa memasak kait saya sendiri. Saya akan melihat ke dalam pre_save_post dan save_post. Terima kasih kawan
Tam N.

Jawaban:

8

Berikut ini adalah blok kode yang sangat kasar yang harus Anda mulai. Apa yang dilakukannya adalah mencari pos "masa depan" atau "terbitkan" terbaru dan jika nilainya kurang dari 1 jam berbeda dari pos terjadwal terbaru, pos itu menjadwalkan pos saat ini menjadi satu jam ditambah waktu "terbaru" yang ditemukan.

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

Ini sebenarnya memaksa penjadwalan posting, dan jika sudah ada posting masa depan yang berikutnya akan dijadwalkan setelah posting yang sudah dijadwalkan. Itu artinya berpotensi menjadwalkan posting jauh ke depan.

Anda mungkin ingin membebaskan peran tertentu dari penjadwalan posting ini, atau mengharuskannya hanya untuk peran tunggal, hanya untuk membantu menjaga hal-hal dapat dikelola.

s_ha_dum
sumber
Terima kasih banyak! Saya melanjutkan dan menempelkan cuplikan ke file function.php saya yang ada di blog pengembangan saya. Ini bekerja dengan sempurna. Pertama saya menerbitkan posting # 1, kemudian saya membuat posting kedua # 2 tepat setelah itu. Ketika saya menekan tombol "Terbitkan", pos diatur ke dijadwalkan selama 60 menit dari saat pos # 1 ditayangkan. Saya mengujinya dengan posting lain # 3, mengaturnya untuk ditayangkan antara posting # 1 dan # 2, secara otomatis mengaturnya kembali ke 1 jam setelah posting # 2. Ini sempurna. Terima kasih banyak!
Tam N.
Hmmm ... jadi ada bug. Itu selalu meraih pos terbaru yang dijadwalkan sebagai basis untuk dibandingkan. Katakanlah, posting # 3 dijadwalkan selama 24 jam. Ketika saya menjadwalkan posting # 4 untuk ditayangkan dalam 12 jam, itu akan selalu menetapkan waktu menjadi 1 jam setelah posting # 3. Yang mengatakan, ini bagus untuk saya lanjutkan. Bagaimanapun, terima kasih!
Tam N.
1
Bukan bug. Saya menjelaskannya dalam jawaban. Mungkin bukan logika yang Anda inginkan, tetapi itu bukan bug. Jika Anda tidak melakukan itu, posting yang diterbitkan terpisah satu menit akan tetap mempublikasikan satu menit terpisah, meskipun (mungkin) tertunda selama satu jam.
s_ha_dum
Kena kau. Saya kira saya hanya perlu posting yang akan ditayangkan segera, bukan yang dijadwalkan. Jika saya memodifikasi cuplikan untuk dimiliki WHERE post_status IN('publish'), saya yakin itu akan bekerja lebih baik untuk apa yang saya butuhkan.
Tam N.
1
Anda dapat mencobanya tetapi pikirkan tentang apa yang terjadi ketika beberapa posting diterbitkan. Mereka semua akan dijadwalkan berdasarkan yang terakhir diterbitkan post-- mungkin sama post--, yang berarti bahwa ketika mereka mempublikasikan mereka masih akan menerbitkan jarak yang sama di waktu terpisah karena mereka akan memiliki jika Anda tidak melakukan apa pun. Mereka baru saja diterbitkan satu jam kemudian.
s_ha_dum
0

Ada sebuah plugin di repositori bernama Auto Future Date yang melakukan sesuatu seperti ini. Itu belum diperbarui cukup lama, tetapi sebagian besar kode tampaknya cukup berguna.

Saya belum mengujinya, tetapi tangkapan layar membuatnya terlihat seperti Anda masih dapat langsung mempublikasikan posting dan tidak menempel pada save_posthook secara otomatis. Membuat kode ini berfungsi dengan kait yang tepat harus melakukan trik.

Coen Jacobs
sumber