Wordpress save_post hook 有错post?
Wordpress save_post hook has the wrong post?
我使用 save_post 挂钩将元值保存到我的自定义 post 类型时得到了一些奇怪的结果。数据保存到不正确的post.
如果我使用下面的代码记录 post ID,我发现这是不正确的,也就是说,当我编辑 post 7890 时,日志条目是 3345(那是存放数据的地方)
我是否误解了 save_post 挂钩的工作原理?任何帮助表示赞赏:)
add_action('save_post','save_data');
function save_data($post_id){
$file = 'log.txt';
$copystring = $post_id ."\n";
file_put_contents($file, $copystring, FILE_APPEND | LOCK_EX);
}
谢谢
基本上你都在正确使用它。 $post_id 应该是要保存的 post 的 ID。在这里阅读更多:https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
但是,可能有多种原因导致您在此处收到错误的 post ID。
- 保存 post 会触发另一个 post
的保存过程
- 您正在收到一些修订 ID
- 您发送的表单 ID 数据有误
- 也许其他人...
在保存 post 挂钩回调中,您应该检查 post 是否属于正确的 post 类型并且它不是修订版或其他内容。
$post = get_post($post_id);
if($post->post_type != 'desired-post-type') {
return;
}
if(wp_is_post_revision( $post_id ) {
return;
}
...也许还有一些其他检查。
什么是post3345?将它打印到您的控制台并检查。它很可能是不同的 post 类型,或者您提交了错误的 ID。
save_post
钩子有 3 个参数 ($post_id, $post, $update)
,它也可以附加到 post 类型:save_post_{$post->post_type}
.
如果 $update === false
正在创建一个全新的 post。
在执行我们的自定义操作之前,还必须进行一些检查。您面临的错误很可能是正在保存 post 修订版。
假设 CPT 是 "jobs"。
add_action( 'save_post_jobs', 'save_data_so', 10, 3 );
function save_data_so( $id, $post, $update ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
# A wp_nonce_field is present, check for it
// if ( !wp_verify_nonce( $_POST['noncename'], plugin_basename( __FILE__ ) ) )
// return;
# Not sure if necessary when using save_post_POST-TYPE
if ( 'revision' == $post->post_type )
return;
# Do your thing
}
我使用 save_post 挂钩将元值保存到我的自定义 post 类型时得到了一些奇怪的结果。数据保存到不正确的post.
如果我使用下面的代码记录 post ID,我发现这是不正确的,也就是说,当我编辑 post 7890 时,日志条目是 3345(那是存放数据的地方)
我是否误解了 save_post 挂钩的工作原理?任何帮助表示赞赏:)
add_action('save_post','save_data');
function save_data($post_id){
$file = 'log.txt';
$copystring = $post_id ."\n";
file_put_contents($file, $copystring, FILE_APPEND | LOCK_EX);
}
谢谢
基本上你都在正确使用它。 $post_id 应该是要保存的 post 的 ID。在这里阅读更多:https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
但是,可能有多种原因导致您在此处收到错误的 post ID。
- 保存 post 会触发另一个 post 的保存过程
- 您正在收到一些修订 ID
- 您发送的表单 ID 数据有误
- 也许其他人...
在保存 post 挂钩回调中,您应该检查 post 是否属于正确的 post 类型并且它不是修订版或其他内容。
$post = get_post($post_id);
if($post->post_type != 'desired-post-type') {
return;
}
if(wp_is_post_revision( $post_id ) {
return;
}
...也许还有一些其他检查。
什么是post3345?将它打印到您的控制台并检查。它很可能是不同的 post 类型,或者您提交了错误的 ID。
save_post
钩子有 3 个参数 ($post_id, $post, $update)
,它也可以附加到 post 类型:save_post_{$post->post_type}
.
如果 $update === false
正在创建一个全新的 post。
在执行我们的自定义操作之前,还必须进行一些检查。您面临的错误很可能是正在保存 post 修订版。
假设 CPT 是 "jobs"。
add_action( 'save_post_jobs', 'save_data_so', 10, 3 );
function save_data_so( $id, $post, $update ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
# A wp_nonce_field is present, check for it
// if ( !wp_verify_nonce( $_POST['noncename'], plugin_basename( __FILE__ ) ) )
// return;
# Not sure if necessary when using save_post_POST-TYPE
if ( 'revision' == $post->post_type )
return;
# Do your thing
}