Làm thế nào để ngăn chặn bài viết được xuất bản quá gần nhau?


9

Tôi quản lý một blog bao gồm khoảng 25 nhà văn. Đôi khi một vài trong số họ đang trong quá trình viết một bài mới và cuối cùng họ xuất bản chúng quá gần nhau.

Có cách nào để ngăn chặn điều này xảy ra? Một cái gì đó để nói "Một bài viết khác chỉ được phát hành trong vòng 5 phút cuối. Bạn sẽ cần đợi 55 phút để xuất bản bài viết của mình."


3
Tôi có quyền tự do sửa đổi một chút Câu hỏi, vì vậy đây không phải là đề xuất plugin rõ ràng (ngoài chủ đề cho mỗi faq ). Nếu có plugin, sẽ có người giới thiệu. Bạn đã tìm kiếm một? Tôi nghĩ rằng một giải pháp tùy chỉnh sẽ là cần thiết. Bạn đã nghiên cứu trang web này?
brasofilo

@brasofilo +1 ... aZn137 (đây có phải là mật khẩu của bạn không?), bạn có thể muốn nối vào pre_save_posthoặc save_post. Bạn có thể chỉ cho chúng tôi một số nghiên cứu về những gì bạn đã thử cho đến nay (ngoài việc cài đặt plugin).
kaiser

Vâng, tôi đã dành một chút thời gian cho Google, nhưng không tìm thấy bất kỳ plugin nào thực hiện thủ thuật này. Tôi có thể tự nấu ăn. Tôi sẽ xem xét pre_save_post và save_post. Cảm ơn các bạn.
Tam N.

Câu trả lời:


8

Đây là một khối mã rất thô sẽ giúp bạn bắt đầu. Những gì nó làm là tìm kiếm bài đăng "tương lai" hoặc "xuất bản" gần đây nhất và nếu giá trị đó ít hơn 1 giờ so với bài đăng được lên lịch gần nhất, nó sẽ lên lịch bài đăng hiện tại đến một giờ cộng với thời gian "gần đây nhất" được tìm thấy.

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

Trên thực tế, điều này buộc phải lập lịch đăng bài, và nếu đã có một bài đăng trong tương lai thì bài tiếp theo sẽ được lên lịch sau bài đăng đã được lên lịch. Điều đó có nghĩa là nó có khả năng có thể sắp xếp các bài viết trong tương lai.

Bạn có thể muốn miễn trừ một số vai trò nhất định khỏi lịch trình đăng bài này hoặc chỉ yêu cầu nó cho một vai trò duy nhất, chỉ để giúp giữ mọi thứ có thể quản lý được.


Cảm ơn rât nhiều! Tôi đã tiếp tục và dán đoạn mã vào tệp function.php của mình trên blog phát triển của mình. Nó hoạt động hoàn hảo. Đầu tiên tôi xuất bản một bài # 1, sau đó tôi đã đăng bài thứ 2 # 2 ngay sau đó. Khi tôi nhấn nút "Xuất bản", bài đăng được đặt thành lịch trong 60 phút kể từ khi bài số 1 được phát hành. Tôi đã thử nghiệm nó với một bài đăng số 3 khác, thiết lập nó để đi vào giữa bài số 1 và số 2, nó tự động đặt nó trở lại 1 giờ sau bài số 2. Đây là hoàn hảo. Cảm ơn rât nhiều!
Tam N.

Hmmm ... vì vậy có một lỗi. Nó luôn lấy bài đăng mới nhất được lên lịch làm cơ sở để so sánh. Nói, bài số 3 được lên kế hoạch trong 24 giờ. Khi tôi lên lịch bài số 4 để phát trực tiếp trong 12 giờ, nó sẽ luôn đặt thời gian là 1 giờ sau bài số 3. Điều đó nói rằng, điều này là tốt cho tôi để tiếp tục. Dù sao cũng cảm ơn bạn!
Tam N.

1
Không phải là một lỗi. Tôi đã giải thích rằng trong câu trả lời. Nó có thể không phải là logic mà bạn muốn, nhưng nó không phải là một lỗi. Nếu bạn không làm điều đó, các bài đăng được xuất bản cách nhau một phút vẫn sẽ xuất bản cách nhau một phút, mặc dù (có lẽ) bị trì hoãn trong một giờ.
s_ha_dum

Gotcha. Tôi cho rằng tôi chỉ cần những bài đăng đang được phát hành ngay lập tức, không phải những bài được lên lịch. Nếu tôi sửa đổi đoạn mã thành có WHERE post_status IN('publish'), tôi tin rằng nó sẽ hoạt động tốt hơn cho những gì tôi cần.
Tâm N.

1
Bạn có thể thử điều đó nhưng suy nghĩ về những gì xảy ra khi một số bài đăng được xuất bản. Tất cả chúng sẽ được lên lịch dựa trên bài đăng được xuất bản cuối cùng-- có thể là cùng một bài đăng--, nghĩa là khi chúng xuất bản, chúng vẫn sẽ xuất bản cùng một khoảng cách theo thời gian như chúng sẽ có nếu bạn không làm gì. Họ sẽ được công bố một giờ sau đó.
s_ha_dum

0

Có một plugin trong kho lưu trữ có tên Auto Future Date , hoạt động như thế này. Nó đã không được cập nhật trong một thời gian dài, nhưng hầu hết các mã có vẻ khá hữu ích.

Tôi đã không kiểm tra nó, nhưng các ảnh chụp màn hình làm cho nó trông giống như bạn vẫn có thể trực tiếp xuất bản bài đăng và không save_posttự động dính vào móc. Làm cho mã này hoạt động với các hook đúng nên thực hiện thủ thuật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.