WordPress指定文章每日自动同步最新自定义文章类型特色图
原有代码问题排查
你的代码存在4个核心错误,无法实现预期功能:
- 函数入参定义无实际作用,且
update_post_meta第一个参数要求传入整数类型的文章ID,你传入的是get_post()返回的文章对象,参数类型不匹配 the_post_thumbnail('thumbnail')的作用是直接输出缩略图的HTML代码,不会返回缩略图对应的媒体附件ID,不能作为_thumbnail_id的存储值- 查询参数没有显式指定按发布时间倒序排序,存在取到非最新文章的风险
- 函数没有绑定WordPress的执行钩子,写完后不会被系统自动调用,永远不会生效
正确实现方案
将以下代码添加到当前主题/子主题的functions.php文件中即可:
/** * 发布wakeup类型文章时,自动更新ID=8661的列表页缩略图为最新文章特色图 */ function sync_latest_wakeup_thumbnail_to_list_page( $post_ID, $post ) { // 仅在wakeup类型文章正式发布时触发逻辑,排除修订、草稿、其他文章类型 if ( $post->post_type !== 'wakeup' || $post->post_status !== 'publish' ) { return; } // 查询最新发布的wakeup文章 $latest_post_query = new WP_Query( [ 'post_type' => 'wakeup', 'post_status' => 'publish', 'posts_per_page' => 1, 'orderby' => 'date', 'order' => 'DESC', 'no_found_rows' => true, // 关闭分页统计,提升查询性能 ] ); if ( ! $latest_post_query->have_posts() ) { return; } $latest_post_query->the_post(); // 获取最新文章的特色图附件ID $latest_thumb_id = get_post_thumbnail_id( get_the_ID() ); wp_reset_postdata(); if ( empty( $latest_thumb_id ) ) { return; } // 直接给ID=8661的文章更新特色图元数据 update_post_meta( 8661, '_thumbnail_id', $latest_thumb_id ); } // 绑定文章保存钩子,接收2个参数 add_action( 'save_post', 'sync_latest_wakeup_thumbnail_to_list_page', 10, 2 );
使用说明
- 代码会在每次wakeup类型文章正式发布(含定时发布)、已发布的wakeup文章更新时自动执行,只要最新的wakeup文章设置了特色图,8661号文章的缩略图就会自动同步
- 首次部署需要立即生效的话,只需要编辑并更新任意一篇已发布的wakeup文章即可触发一次同步
- 如果后续列表页文章ID有变动,直接修改代码里
update_post_meta的第一个参数数值即可
内容的提问来源于stack exchange,提问作者MsMaryMak
相关产品推荐
相关产品推荐

