• 注册
  • 个人说明:TA有点懒了,什么都没有写。
    关注 1 粉丝 0 喜欢 0 内容 256
    河南省·郑州市
    聊天 送礼

    新版界面开发进度

    14%
    其实就是啥也没写,只有想法,哈哈
    • 回帖总排行
    • 采纳总排行

    分享精彩给好友

    全部文章 关注:0 内容:1074

    WordPress删除链接wp_delete_link函数定时自动删除过期友情链接【转】

  • 查看作者
  • 打赏作者
  • 拉黑名单
    • 随着大家网站流量权重的提升,相信很多站长都在寻找属于自己的盈利模式。其实很大一部分个人网站是无法实现盈利的,比如说本站代码狗博客,只能做到收支平衡。为了保障服务器的正常运转,很多站长就会用到出售友情链接的方式来换取一定的利润,一般来说一个权1的网站想要保证不亏钱还是很简单的。随着友情链接越来越多,我们可能会忘记哪个友链该过期了,因此,为了服务于懒人,我结合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定时任务自动删除wp_delete_link过期友情链接

      日期格式不限制,我提供的代码只支持这种格式,要修改格式请修改下面的日期格式化字符串。

      然后通过如下代码查询所有链接来删除链接。

      <?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定时任务是有人访问才会触发的!

      你需要登录,才能进行发帖操作