WordPress网站建设宣传图片

WordPress去除文章失效链接

释放双眼,带上耳机,听听看~!

网站运行的时间长了,里面引用的一些链接可能就会已经失效了,甚至是跳转到一些赌博、色情网站,这个时候无论是打不开还是链接打开后和文章引用时候说的不一样,都是对用户非常不好的体验,所以我们就需要把这些失效链接删除,下面我就来分享WordPress去除文章失效链接的方法:

使用代码实现

把下面代码添加到你主题的functions.php文件,既可以实现删除文章失效链接了:

function check_broken_links($content) {
    // 使用正则表达式匹配所有的链接
    $pattern = '/<a(.*?)href=["\'](http[s]?:\/\/[^"\']+)["\'](.*?)>(.*?)<\/a>/i';
    preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

    foreach ($matches as $match) {
        $url = $match[2];
        $link_text = $match[4];

        // 使用cURL检查链接的有效性
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_exec($ch);
        $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        // 如果返回的HTTP状态码不等于200、301或302,则认为链接失效
        if ($retcode != 200 && $retcode != 301 && $retcode != 302) {
            // 创建一个新的链接,使用删除线,并添加broken-link类
            $new_link = '<span class="broken-link"><s>' . $link_text . '</s></span>';

            // 在内容中替换旧的链接
            $content = str_replace($match[0], $new_link, $content);
        }
    }

    return $content;
}

// 将我们的函数添加到'the_content'过滤器
add_filter('the_content', 'check_broken_links');

上面的代码的作用是提取文章中所有的链接的,然后通过PHP的cURL函数检测这个链接是否有效(如果状态码不等于200、301或302就认为是无效)。注释写的很清除。就不重复叙述了。

这个函数会把检测到的失效链接的文字,增加删除线,并给它添加了一个类名为class=”broken-link”的span标签,方便你给这些失效链接增加样式来提醒用户,嘿嘿,我想的周到把。如下图所示:

WordPress去除文章失效链接 1

如果你只是单纯的想去除链接,就可以使用下面的代码,一样是加到主题的functions.php文件即可。

function check_broken_links($content) {
    // 使用正则表达式匹配所有的链接
    $pattern = '/<a(.*?)href=["\'](http[s]?:\/\/[^"\']+)["\'](.*?)>(.*?)<\/a>/i';
    preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

    foreach ($matches as $match) {
        $url = $match[2];
        $link_text = $match[4];

        // 使用cURL检查链接的有效性
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_exec($ch);
        $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        // 如果返回的HTTP状态码不等于200、301或302,则认为链接失效
        if ($retcode != 200 && $retcode != 301 && $retcode != 302) {
            // 只保留链接的文字
            $new_link = $link_text;

            // 在内容中替换旧的链接
            $content = str_replace($match[0], $new_link, $content);
        }
    }

    return $content;
}

// 将我们的函数添加到'the_content'过滤器
add_filter('the_content', 'check_broken_links');

上面的两个函数是不会修改数据库中实际内容的。当你删除函数后,内容会恢复原样。如果你需要直接修改掉,则可以参看下面这个代码:

function update_broken_links() {
    // 获取所有的文章
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );
    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();

            $content = get_the_content();

            // 使用正则表达式匹配所有的链接
            $pattern = '/<a(.*?)href=["\'](http[s]?:\/\/[^"\']+)["\'](.*?)>(.*?)<\/a>/i';
            preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

            foreach ($matches as $match) {
                $url = $match[2];
                $link_text = $match[4];

                // 使用cURL检查链接的有效性
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_NOBODY, true);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_exec($ch);
                $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                curl_close($ch);

                // 如果返回的HTTP状态码不等于200、301或302,则认为链接失效
                if ($retcode != 200 && $retcode != 301 && $retcode != 302) {
                    // 只保留链接的文字
                    $new_link = $link_text;

                    // 在内容中替换旧的链接
                    $content = str_replace($match[0], $new_link, $content);
                }
            }

            // 更新文章内容
            $post_id = get_the_ID();
            $post = array(
                'ID' => $post_id,
                'post_content' => $content,
            );
            wp_update_post($post);
        }
    }
    wp_reset_postdata();
}

注意,如果你的文章数量、链接有很多,则可能会对占用你服务器比较多的性能。

编辑当前主题的 functions.php 文件

WordPress网站后台 – 仪表盘 – 外观 – 主题文件编辑器(有的版本可能显示是编辑)>选择主题functions.php文件>添加代码>保存文件:

WordPress后台>主题文件编辑器>编辑functions.php文件页面

注意

上面添加到主题functions.php文件的这种方式添加的功能代码只在当前使用主题下有作用,如果你切换了主题,那么这个时候就会失效,所以要注意。

推荐

推荐你使用WPCode 代码片段插件,你可以直接将上述代码添加为一个新的代码片段开启,在不需要的时候也可以直接对这个功能代码选择关闭就行,这个插件可以非常方便的管理在WordPress网站上的功能代码,如下示例:

WPCode 插件代码片段列表、管理示例

这个插件它的代码库中还有许多使用的功能代码片段,你可以选择你用得上的然后导入、选择开启就可以了,如下示例:

WordPress代码片段插件 WPCode 代码片段库截图

关于这个插件的介绍推荐你看我之前文章:WordPress代码片段插件 WPCode

使用插件实现

推荐你使用Broken Link Checker插件来清理文章中的失效链接,插件的使用非常简单,下载后安装或者在线安装,启用后根据自己的需求进行一点简单的配置,插件就会自动检测了:比较详细的解释在之前的文章中有说:WordPress文章失效图片/链接检测插件推荐:Broken Link Checker,这里则不在重复叙述,下面附一下下载地址:

下载地址

Broken Link Checker WordPress插件库下载地址:Broken Link Checker – WordPress plugin | WordPress.org

你可以直接在WordPress网站后台搜索Broken Link Checker安装:

WordPress网站后台搜索Broken Link Checker结果页面

相关文章推荐

WordPress去除文章失效图片

WordPress文章外部链接清除

WordPress批量去除文章失效特色图片或所有特色图片

WordPress删除多余图片

WordPress删除文章时同时自动删除图片和附件

给TA打赏
共{{data.count}}人
人已打赏
WordPress技巧

WordPress去除网站失效特色图片/缩略图

2024-2-27 19:54:52

WordPress技巧WordPress插件分享WordPress教程

WordPress设置Rest API 访问权限

2024-4-9 19:51:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
展开目录