WordPress如何定时自动检查删除过期友情链接

发布时间:

我们在使用WordPress的时候,高质量的友情链接也是会给站点增加权重的,那么我们在使用WordPress的时候,如何定时自动检查及删除过期友情链接呢?下面就来看看吧!

WordPress如何定时自动检查删除过期友情链接

随着友情链接越来越多,我们可能会忘记哪个友链该过期了,因此,为了服务于懒人,我结合 wordpress 函数写下的这个利用定时任务与 wp_delete_link 函数自动删除过期友情链接的方法。

wp_delete_link 函数

官方描述是:从数据库中删除指定 id 的链接。

返回值始终为真。

奇怪的是,我测试了下这个函数,WordPress 提示说找不到这个函数,最后我是通过 wp_delete_link 函数的构造内容来实现的,也就是说,参考官方实现办法自己写了个 wp_delete_link 函数。

构造的 wp_delete_link 函数如下:

function wp_delete_link( $link_id ) {
    global $wpdb;
    do_action( 'delete_link', $link_id );
 
    wp_delete_object_term_relationships( $link_id, 'link_category' );
 
    $wpdb->delete( $wpdb->links, array( 'link_id' => $link_id ) );
 
    do_action( 'deleted_link', $link_id );
 
    clean_bookmark_cache( $link_id );
 
    return true;
}

 

建议我们自己写的时候不要使用 wp_delete_link 这个相同的名字,不然可能会出错。很明显,这个函数有两个钩子动作,一个是在删除之前触发,一个是在删除之后触发,我们使用的时候就不需要这两个动作了,删除它。然后在后台新建一个链接,记得填上过期时间。

WordPress如何定时自动检查删除过期友情链接
日期格式不限制,我提供的代码只支持这种格式,要修改格式请修改下面的日期格式化字符串。然后通过如下代码查询所有链接来删除链接。

<?php
function cron_dellink(){
//得到所有链接分类,并遍历链接分类
$categories=get_categories(array( 'type' => 'link'));
foreach ( $categories as $categorie ) {
       //根据分类id遍历链接详情
	$bookmarks = get_bookmarks( array(
		'orderby'        => 'name',
		'order'          => 'ASC',
		'category'	=> $categorie->term_id
	));
       foreach ( $bookmarks as $bookmark ) { 
           //判断下有没有过期日期数据
            if($bookmark->link_notes){
                 date_default_timezone_set('PRC');
                 if(strtotime($bookmark->link_notes)<time()){
                   //这里的内容可以单独写成上面的函数
                    global $wpdb;
                    wp_delete_object_term_relationships( intval($bookmark->link_id), 'link_category' );
                    $wpdb->delete( $wpdb->links, array( 'link_id' => intval($bookmark->link_id) ) );
	            clean_bookmark_cache( intval($bookmark->link_id) );
                 }
             }  
       }
}
}
?>

我将过期日期填在备注里,使用 link_notes 可以获取。不出意外,上面的代码可以删除时间超过现在的链接,下面添加定时任务。

//定时任务
add_filter( 'cron_schedules', 'salong_add_every_time' );
function salong_add_every_time( $schedules ) {
    $schedules['every_time'] = array(
        'interval'  => 600,
        'display'   => __( '每隔10分钟', 'salong' )
    );
    return $schedules;
}
if ( ! wp_next_scheduled( 'salong_add_every_time' ) ) {
    wp_schedule_event( time(), 'every_time', 'salong_add_every_time' );
}
add_action( 'salong_add_every_time', 'cron_dellink' );

定时任务在前面也讲过,可以参考下 WordPress 使用 WP-Cron 定时任务删除从未登录的用户,效果还不错。别问我为什么过了 20 分钟都没有删除链接,那是因为这 20 分钟内都没人访问你的网站,cron 定时任务是有人访问才会触发的!