WordPress批量去除文章失效特色图片或所有特色图片方法分享:
当我们的WordPress网站运营很长时间或者是有时候可能会出现一部分的文章以前是单独设置的特色图片(缩略图)已经失效了,又或者网站搬家数据迁移、更换主题等情况设置的缩略图不匹配等等情况,就需要清除缩略图。
通用说明
下面我给出了三个不同的方式用于删除文章特色图片,它们会适用于不同的使用情况,你可以看描述根据自己的需求去选择。
但是它们都有共同点,就是都是通过把代码添加到主题的functions.php文件中实现,所以推荐你使用WPCode 代码片段插件,你可以直接将上述代码添加为一个新的代码片段开启,关于这个插件的介绍推荐你看我之前文章:WordPress代码片段插件 WPCode。
其次是把它们加入到你的主题function文件中之后,刷新一下你的网站,确认你WordPress网站的文章特色图片被删除后(这个时候就要记得清理网站、浏览器的CDN、各种缓存 避免出乌龙,明明删除了以为没删除。),删除或者关闭对应的代码,不然你以后设置的特色图片可能还是会被删除。
在删除之后还可以配合我之前分享的:wordpress自动设置第一张图为特色图片方法一起使用。哈哈,贴心吧。
删除已失效的WordPress文章特色图片
// 删除已失效的WordPress文章特色图片
// https://www.linfengnet.com/
function check_and_delete_thumbnail() {
// 获取当前文章的特色图片ID
$thumbnail_id = get_post_thumbnail_id();
// 如果特色图片ID存在
if ( $thumbnail_id ) {
// 获取特色图片的URL
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'full' );
// 使用curl检查特色图片是否可以正常访问
$ch = curl_init($thumbnail_url[0]);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 如果特色图片无法正常访问
if ($httpCode != 200) {
// 删除特色图片
delete_post_thumbnail( get_the_ID() );
}
}
}
add_action( 'wp', 'check_and_delete_thumbnail' );
上面代码的会获取文章特色图片的URL,然后访问判断HTTP状态码是否等于200,如果是的话则代表正常,如果不是则移除,详细的代码解释看下下面吧:
代码解释
get_post_thumbnail_id()
:- 这个函数用于获取当前文章的特色图片ID。
if ( $thumbnail_id ) {...}
:- 这个条件判断用于检查特色图片ID是否存在。如果存在,则执行花括号内的代码。
wp_get_attachment_image_src( $thumbnail_id, 'full' )
:- 这个函数用于获取特色图片的URL。参数
'full'
表示获取原始尺寸的图片。
- 这个函数用于获取特色图片的URL。参数
curl_init($thumbnail_url[0])
:- 这行代码使用cURL初始化一个新的会话,用于检查特色图片的URL是否可以正常访问。
curl_setopt($ch, CURLOPT_NOBODY, true)
:- 这行代码设置cURL选项,
CURLOPT_NOBODY
设置为true
表示只需要获取HTTP头部信息,不需要获取具体的内容。
- 这行代码设置cURL选项,
curl_exec($ch)
:- 这行代码执行cURL会话。
curl_getinfo($ch, CURLINFO_HTTP_CODE)
:- 这行代码获取HTTP响应状态码。
if ($httpCode != 200) {...}
:- 这个条件判断用于检查HTTP响应状态码是否为200。如果不是200,表示特色图片无法正常访问,然后执行花括号内的代码。
delete_post_thumbnail( get_the_ID() )
:- 这个函数用于删除当前文章的特色图片。
add_action( 'wp', 'check_and_delete_thumbnail' )
:- 这行代码将
check_and_delete_thumbnail
函数挂载到wp
动作上,这意味着当WordPress加载任何页面时,都会执行这个函数。
- 这行代码将
删除所有特色图片
delete_post_meta_by_key( '_thumbnail_id' );
代码解释
delete_post_meta_by_key函数会根据你给出的文章元字段的键删除对应的数据
了解详细请你自己看官方文档:delete_post_meta_by_key() – Function | Developer.WordPress.org
删除指定类型的内容特色图片
function remove_all_featured_images() {
$args = array(
'post_type' => array( 'post', 'page' ), // 查找文章/页面 在这增加或删减要删除的类型
'post_status' => 'any', // 查找所有状态的文章和页面
'posts_per_page' => -1 // 获取所有符合条件的文章和页面
);
$posts_with_thumbnail = get_posts( $args );
foreach ( $posts_with_thumbnail as $post ) {
remove_post_thumbnail( $post->ID ); // 删除特色图片
}
}
add_action( 'init', 'remove_all_featured_images' );
代码解释
上面代码会根据你指定的类型去获取对应的所有内容然后删除特色图片,详细的代码解释看下下面吧:
$args = array(...)
:- 这个数组定义了
get_posts
函数的参数,用于获取所有的文章和页面。
- 这个数组定义了
'post_type' => array( 'post', 'page' )
:- 这个参数指定了要获取的文章类型,包括文章(’post’)和页面(’page’)。
'post_status' => 'any'
:- 这个参数指定了要获取的文章状态,’any’表示获取所有状态的文章和页面。
'posts_per_page' => -1
:- 这个参数指定了每页要获取的文章数量,-1表示获取所有符合条件的文章和页面。
$posts_with_thumbnail = get_posts( $args )
:- 这行代码调用
get_posts
函数,获取所有符合条件的文章和页面,并将结果存储在$posts_with_thumbnail
变量中。
- 这行代码调用
foreach ( $posts_with_thumbnail as $post ) {...}
:- 这个循环遍历所有获取到的文章和页面。
remove_post_thumbnail( $post->ID )
:- 这个函数用于删除当前遍历到的文章或页面的特色图片。
add_action( 'init', 'remove_all_featured_images' )
:- 这行代码将
remove_all_featured_images
函数挂载到init
动作上,这意味着当WordPress初始化时,都会执行这个函数。
- 这行代码将
删除指定分类文章特色图片
function remove_featured_images_from_category($category_id) {
// 获取指定分类的所有文章
$posts = get_posts(array(
'category' => $category_id,
'numberposts' => -1, // 获取所有文章
));
foreach ($posts as $post) {
// 检查文章是否设置了特色图片
if (has_post_thumbnail($post->ID)) {
// 取消这个特色图片设置
delete_post_thumbnail($post->ID);
}
}
}
// 直接调用函数,参数是你的分类ID
remove_featured_images_from_category(65);