通过REST API创建Job Listing后自动触发更新以显示地理定位元字段
解决WP Job Manager自定义文章类型创建后地理定位元字段不显示的问题
我用WP Job Manager创建了job_listing自定义文章类型,通过Postman调用REST API新增文章后,地理定位元字段只有手动打开文章点击「更新/发布」按钮才会在前端显示。需要编写一个函数,在该自定义文章类型创建时自动触发一次更新操作,且仅执行一次。
实现代码
function update_job_once_created( $post_id ) { // 跳过自动保存、修订版本场景 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( wp_is_post_revision( $post_id ) ) return; // 验证文章类型,且确保未执行过自动更新 $has_updated = get_post_meta( $post_id, '_job_auto_updated', true ); if ( get_post_type( $post_id ) !== 'job_listing' || $has_updated ) return; // 添加标记,防止无限循环及重复执行 update_post_meta( $post_id, '_job_auto_updated', '1' ); // 触发文章更新,模拟手动点击更新按钮的逻辑 wp_update_post( array( 'ID' => $post_id, 'post_status' => get_post_status( $post_id ) // 保持文章原有状态 ) ); } add_action( 'save_post_job_listing', 'update_job_once_created', 10, 1 );
代码说明
- 先排除自动保存和修订版本的场景,避免无效触发。
- 用自定义元字段
_job_auto_updated做标记,确保函数仅在文章首次创建时执行一次,同时防止wp_update_post触发save_post钩子导致无限循环。 - 调用
wp_update_post时保持文章原有状态,目的是触发WP Job Manager内部的地理定位元字段处理逻辑(比如根据地址生成经纬度等),和手动点击「更新」按钮的效果一致。 - 如果地理定位逻辑仍未触发,可以尝试调整钩子优先级(将
10改为20),确保在WP Job Manager的初始保存逻辑完成后再执行更新操作。
内容的提问来源于stack exchange,提问作者Yurii
相关产品推荐
相关产品推荐

