问题描述
是否可以在 save_post 操作中确定是否正在创建新职位或更新现有职位?
最佳解决方案
自 WordPress 版本 3.7 起。 – IIRC – save_post
钩子 – 有关钩子及其在代码参考中的使用的更多信息:save_post
和 Codex:save_post
– 具有可用于确定的第三个参数 $update
。
@param int $post_ID Post ID.
@param WP_Post $post Post object.
@param bool $update Whether this is an existing post being updated or not.
次佳解决方案
执行此检查 (在挂钩函数中) 的方式是比较发布日期和修改日期 (以 GMT 格式进行标准化)
function check_new_vs_update( $post_id ){
$myPost = get_post($post_id);
if( $myPost->post_modified_gmt == $myPost->post_date_gmt ){
//New Post
}else{
//Updated Post
}
}
add_action('save_post', 'check_new_vs_update' );
这是因为即使在创建时,该帖子也附有一个’modified’ 日期,与’created’ 日期完全相同。
第三种解决方案
我最终只是在设置之前检查自定义值的存在。这样,如果它是一个新创建的帖子,则自定义值将不存在。
function attributes_save_postdata($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!wp_verify_nonce($_POST['_attributes_noncename'], plugin_basename(__FILE__))) return;
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) return;
} else {
if (!current_user_can('edit_post', $post_id)) return;
}
$termid = get_post_meta($post_id, '_termid', true);
if ($termid != '') {
// it's a new record
$termid = 'update';
} else {
// it's an existing record
}
update_post_meta($post_id, '_termid', $termid);
}
add_action('save_post', 'attributes_save_postdata');
第四种方案
ialocin 答案示例用”update” 测光仪:
function save_func($ID, $post,$update) {
if($update == false) {
// do something if its first time publish
} else {
// Do something if its update
}
}
add_action( 'save_post', 'save_func', 10, 3 );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。