在给定日期之前注册的站点的Get_Sites()

时间:2018-08-14 作者:Mike

我正在尝试检索WordPress多站点实例中在给定日期/时间之前注册的站点列表。

使用get_sites()WP_Date_Query 我有以下内容,但没有网站被退回。。。

$now       = current_time( \'timestamp\' );
$lifetime  = epd_get_default_site_lifetime(); // returning 3600. Aim to retrieve all sites registered over an hour ago

if ( ! $lifetime )  {
    return;
}

$delete_on = $now - $lifetime;

$delete_sites_query = array(
    \'site__not_in\' => array( get_network()->blog_id ),
    \'date_query\' => array(
        array(
            \'year\'          => date( \'Y\', $delete_on ),
            \'month\'         => date( \'n\', $delete_on ),
            \'day\'           => date( \'j\', $delete_on ),
            \'hour\'          => date( \'G\', $delete_on ),
            \'minute\'        => intval( date( \'i\', $delete_on ) ),
            \'second\'        => intval( date( \'s\', $delete_on ) ),
            \'compare\'       => \'<=\',
            \'column\'        => \'registered\'
        )
    )
);

$delete_sites_query = apply_filters( \'epd_delete_sites_query\', $delete_sites_query );

$sites = get_sites( $delete_sites_query );
如果我var_export( $delete_sites_query ); 我看到了以下内容(对我来说似乎是正确的)。。。

array (
  \'site__not_in\' => 
  array (
    0 => \'1\',
  ),
  \'date_query\' => 
  array (
    0 => 
    array (
      \'year\' => \'2018\',
      \'month\' => \'8\',
      \'day\' => \'14\',
      \'hour\' => \'22\',
      \'minute\' => 46,
      \'second\' => 19,
      \'compare\' => \'<=\',
      \'column\' => \'registered\',
    ),
  ),
)
我已经在上述日期之前注册了网站。。。

registered column within the wp_blogs table

1 个回复
SO网友:Nikolay

在此,应永久删除所有超过30天的站点(ID为1的站点除外)。我无法使用date\\u查询。

如果出于其他原因需要为这些站点调用get\\u sites(),只需在数组中添加它们的ID,然后仅为此数组中的站点调用get\\u sites()。要获得超过100个的站点,需要更改number参数,如下所述。

$delete_on_timestamp = time() - 3600*24*30;

$args = array (
    \'site__not_in\' => array ( 1 ),
    \'fields\' => \'ids\',
    \'number\' => 999999,
);

$site_ids = get_sites( $args );

foreach( $site_ids as $site_id ) {
    $object_site_details = get_blog_details( $site_id );
    $site_register_timestamp = strtotime( $object_site_details->registered );
    if ( $site_register_timestamp <= $delete_on_timestamp ) {
        wpmu_delete_blog( $site_id, true );
    }
}
请记住,注册的时间存储在主站点的时区中,而上次更新的时间使用GMT时间。我已报告此问题here 它应该被修复。

还要记住,如果您有很多站点,此代码将超时。要解决此问题,可以使用offset和number参数在较小的块中多次执行此操作。

结束