如何防止帖子之间的距离太近?


9

我管理着一个由25位作家组成的博客。有时其中一些正在同时撰写新帖子,而最终发布时彼此之间距离太近。

有办法防止这种情况发生吗?可以说“最近5分钟内又发布了一条帖子。您需要等待55分钟才能发布您的帖子。”


3
我随意修改了Question,所以它不是一个明确的插件推荐(根据常见问题解答)。如果有插件,有人会推荐。您搜索过吗?我认为有必要提供定制解决方案。您研究过这个网站吗?
brasofilo

@brasofilo +1 ... aZn137(这是您的密码吗?),您可能想要插入pre_save_postsave_post。您能否向我们展示一些您到目前为止所做的研究(除了安装插件)。
kaiser 2013年

是的,我花了一些时间在Google上搜索,但还没有找到可以完成此技巧的插件。我也许可以自己动手做饭。我将研究pre_save_post和save_post。谢谢你们。
Tam N.

Answers:


8

这是一个非常粗糙的代码块,应该可以帮助您入门。它的作用是查找最新的“未来”或“发布”帖子,如果该值与最新安排的帖子相差不到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);

实际上,这确实会强制执行发布计划,并且如果已经存在将来的发布,则将在该已计划发布之后计划下一个发布。这意味着它可以潜在地安排将来发布的帖子。

您可能希望从此发布计划中免除某些角色,或者只对单个角色要求它,以帮助使事情易于管理。


非常感谢你!我继续并将代码段粘贴到开发博客中的我的function.php文件中。它运作完美。首先,我发布了第一篇文章,然后紧接着发布了第二篇第二篇文章。当我点击“发布”按钮时,该帖子被设置为自帖子#1上线起的60分钟。我在另一个帖子#3中进行了测试,将其设置为在帖子#1和#2之间生效,它自动将其设置为帖子#2之后的1小时。太棒了。非常感谢你!
Tam N.

嗯...所以有一个错误。它总是获取计划作比较的最新帖子。假设第3个帖子的预定时间为24小时。当我安排第4条帖子在12个小时内上线时,它将始终设置为第3条帖子之后1个小时的时间。话虽如此,这对我来说是一件好事。不管怎么说,还是要谢谢你!
Tam N.

1
不是错误。我在回答中解释了这一点。这可能不是您想要的逻辑,但这不是错误。如果您不这样做,则每隔一分钟发布一次的帖子仍然会每隔一分钟发布一次,尽管(可能)延迟了一个小时。
s_ha_dum 2013年

知道了 我想我只需要发布即时发布的帖子,而不是预定发布的帖子。如果我将代码段修改为具有WHERE post_status IN('publish'),我相信它会更好地满足我的需求。
Tam N.

1
您可以尝试一下,但请考虑发布多个帖子时会发生什么。他们都会根据最近发布的帖子(可能是一篇帖子)进行安排,这意味着当他们发布时,他们仍然会发布与您不进行任何操作时相同的时间间隔。他们只是在一小时后出版。
s_ha_dum 2013年

0

存储库中有一个名为“ 自动将来的日期”的插件,它可以执行以下操作。它已经有一段时间没有更新了,但是大多数代码似乎都很有用。

我没有测试过,但是屏幕截图使您看起来仍然可以直接发布该帖子,而不会save_post自动坚持下去。使此代码与正确的钩子一起使用应该可以解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.