创建帖子时,我需要自动生成帖子的PDF版本。问题是,除了post ID之外,global$post对象大部分是空的。我需要获取新创建的post的slug,因为PDF文件的名称需要与页面的slug匹配。
add_action( \'save_post\', \'my_save_post\' );
function my_save_post($post_id) {
global $post;
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
$pdf = new PDF();
$pdf->createPDF( $post );
// Debug
print_r( $post );
die();
}
如果发布新帖子,然后返回并更新帖子,$post变量包含所有正确的数据,但如果是新帖子,则对象为空。我也试过
edit_post
和
post_updated
钩子,但在任何情况下,slug和大多数其他数据都不存在于$post变量中。
*更新的挂钩和结果print_r($post)
:
add_action( \'save_post\', \'my_save_post\', 10, 3 );
function my_save_post( $post_id, $post, $update ) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
if ( \'auto-draft\' === $post->post_status ) return;
$pdf = new PDF();
$pdf->createPDF( $post );
// Debug
print_r( $post );
die();
}
下面是
print_r
:
WP_Post Object
(
[ID] => 593
[post_author] => 1
[post_date] => 2017-11-20 18:29:36
[post_date_gmt] => 2017-11-20 18:29:36
[post_content] =>
[post_title] =>
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => 593
[to_ping] =>
[pinged] =>
[post_modified] => 2017-11-20 18:29:36
[post_modified_gmt] => 2017-11-20 18:29:36
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://localhost:8888/testsite/?post_type=publication&p=593
[menu_order] => 0
[post_type] => publication
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
)
最合适的回答,由SO网友:Nathan Johnson 整理而成
第一次save_post
当WordPress创建自动草稿时激发它。看见Why does save_post action fire when creating a new post?
要修复,只需检查$post
变量的post状态为“自动草稿”。
add_action( \'save_post\', \'my_save_post\', 10, 3 );
function my_save_post( $post_id, $post, $update ) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
if( \'auto-draft\' === $post->post_status ) return;
$pdf = new PDF();
$pdf->createPDF( $post );
}