你在使用一个未定义的$post->ID
变量,因为没有对任何$post
代码中的对象;相反,请使用$post_ID
函数中检索到的变量:
function on_jobs_publish( $post_ID ) {
global $wpdb;
$wpdb->insert(
\'iCrewzWp_postmeta\',
array(
\'post_id\' => $post_ID,
\'meta_key\' => \'_yoast_wpseo_sitemap-include\',
\'meta_value\' => \'always\'
),
array(
\'%d\',
\'%s\',
\'%s\'
)
);
}
add_action( \'publish_custom-jobs\', \'on_jobs_publish\', 10, 1 );
此外,与其使用
global $wp_query
并运行insert方法,我认为用户
update_post_meta
作用
function on_jobs_publish( $post_ID ) {
update_post_meta($post_ID, \'_yoast_wpseo_sitemap-include\', \'always\' );
}
add_action( \'publish_custom-jobs\', \'on_jobs_publish\', 10, 1 );
请注意
publish_{post-type}
当post将状态从任何值更改为“发布”时,将触发操作。这意味着,如果帖子已经发布,并且您尝试更新它,则不会执行此功能。如果需要在不考虑post状态的情况下执行它,请使用
save_post
行动挂钩:
function on_jobs_publish( $post_ID, $post ) {
//Check that the post type being edited is our custom post type
if ( $post->post_type != \'custom-jobs\' ) {
return;
}
update_post_meta($post_ID, \'_yoast_wpseo_sitemap-include\', \'always\' );
}
add_action( \'save_post\', \'on_jobs_publish\', 10, 2 );
还有一条关于未来的建议。当您使用
wpdb
类,就像使用insert方法一样,从不使用完整的表名,而是将前缀替换为
$wpdb->prefix
所有物这样更安全。例如,在代码中:
global $wpdb;
$wpdb->insert(
$wpdb->prefix.\'_postmeta\',
//Rest of the code