我使用save_post钩子将一些奇怪的结果保存到我的自定义帖子类型中。数据将保存到错误的帖子中。
如果我使用下面的代码记录帖子ID,我看到是不正确的,就是当我编辑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);
}
谢谢
答案 0 :(得分:0)
基本上你正确使用它。 $ post_id应该是要保存的帖子的ID。在此处阅读更多内容:https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
但是,您可能有多种原因在这里收到错误的帖子ID。
在保存帖子钩子回调中,你应该检查帖子是否是正确的帖子类型,并且它不是修订版本等。
$post = get_post($post_id);
if($post->post_type != 'desired-post-type') {
return;
}
if(wp_is_post_revision( $post_id ) {
return;
}
......也许是其他一些检查。
3345的帖子是什么?将其打印到您的控制台并检查。很可能它是一个不同的帖子类型或你提交错误的ID。
答案 1 :(得分:0)
save_post
挂钩需要3个参数($post_id, $post, $update)
,并且还可以附加到帖子类型:save_post_{$post->post_type}
。
如果$update === false
正在创建一个全新的帖子。
在执行自定义操作之前,还必须执行检查。您可能面临的错误很可能是保存了修订后的内容。
让我们说CPT是“工作”。
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
}