我正在尝试检索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\',
),
),
)
我已经在上述日期之前注册了网站。。。

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参数在较小的块中多次执行此操作。