发布的帖子在90天后自动更改状态为待定

时间:2019-11-06 作者:Bryan

我注册了一个自定义帖子类型“job”,以创建工作板网站。如果没有插件,我怎样才能让帖子在90天后自动变为挂起状态?我是WordPress&;方面的新手;PHP. 我尝试了一些在互联网上找到的解决方案,但没有奏效。

对不起,我不太擅长PHP, 我自己不会写代码。对于测试,如果我更改过期1天的代码,这些解决方案是否需要等待1天?因为我将代码粘贴到functions.php 什么都没发生。

尝试过的解决方案:Code to auto expire posts after 30 daysAutomatically move pending posts after 30 days and, update the post date, when users update the postsSet post to draft after set period based on post_modified datePosts to expire (deleted) after a date

2 个回复
最合适的回答,由SO网友:cjbj 整理而成

这是一个看似简单但实际上相当复杂的问题。如果你不想使用现有的插件,你必须编写自己的插件(从而了解更多php 由于这不是一个请写我的免费网站代码)。这是一个提纲。

首先,您需要select all the posts 超过90天且状态为“已发布”的作业类型。像这样:

$args = array(
  \'post_type\' => \'job\',
  \'date_query\' => \'XXX\',
  \'post_status\' => \'published\',
  \'nopaging\' => true );
$wpse251989_query = wp_query ($args);
在XXX,你需要写一个查询,选择90天前的日期(你不能只从今天减去90,因为如果不是4月,那会得到一个负值)。

现在,你必须loop 通过所有帖子,您可以检索并更改状态。

if ( $wpse251989_query->have_posts() ) {
  while ( $wpse251989_query->have_posts() ) {
    $wpse251989_query->the_post();
    wp_update_post(array (\'post_status\' => \'pending\'));
    }
  }
如果您将此代码转储到functions.php 它将在每次页面加载时执行。如果你有一个功能强大的服务器,你可以不受惩罚。你也可以把它放在一个条件后面,比如is_admin, 确保仅在管理员登录时执行。确保每天只执行一次的最安全方法是使用cron job, 这将使您进入高级php领域。

SO网友:Pratikb.Simform

在函数中尝试以下代码。php

function expire_posts() {
  global $wpdb;
  $daystogo = "30";
  $sql = "UPDATE wp_posts SET `post_status` = \'draft\' WHERE `post_type` = \'post\' AND DATEDIFF(NOW(), `post_date`) > \'$daystogo\')";
  $wpdb->query( $sql );
}

add_action (\'init\' ,\'expire_posts\')

相关推荐

获取GET_POSTS()生成的确切SQL查询

我正在开发一个WordPress,它是由其他人启动然后消失的。她使用不同的插件创建了一些自定义内容类型和变量,现在我想访问她为模板创建的函数中的数据集。$args = array( \'suppress_filters\' => 0, \'posts_per_page\' => -1, \'sort_order\' => \'ASC\',