您需要设置ID
对于post_title
和post_name
. 你有很多方法。
通常,您的方法是在WordPress中使用过滤器。我只能说wp_insert_post_data
并使用此过滤器的第二个参数获取post id,然后返回第一个参数,其中包含修改后的post_title
和post_name
.
另一种选择是使用操作save_post
或wp_insert_post
它们是用相同的参数定义的。
File: wp-includes/post.php
3496: /**
3497: * Fires once a post has been saved.
3498: *
3499: * @since 1.5.0
3500: *
3501: * @param int $post_ID Post ID.
3502: * @param WP_Post $post Post object.
3503: * @param bool $update Whether this is an existing post being updated or not.
3504: */
3505: do_action( \'save_post\', $post_ID, $post, $update );
3506:
3507: /**
3508: * Fires once a post has been saved.
3509: *
3510: * @since 2.0.0
3511: *
3512: * @param int $post_ID Post ID.
3513: * @param WP_Post $post Post object.
3514: * @param bool $update Whether this is an existing post being updated or not.
3515: */
3516: do_action( \'wp_insert_post\', $post_ID, $post, $update );
这可能是您可以开始的地方。请注意,使用
wp_update_post
在…的结尾
_20170104_02
函数将激发
save_post
再次执行操作,因此我们需要删除该操作以从无限循环中逃脱。
如果你想使用wp_insert_post_data
这是不需要的,因为过滤器返回数据。
add_action(\'save_post\', \'_20170104_02\', 10, 3);
function _20170104_02( $post_id, $post, $update ){
if ( \'cpt\' != $post->post_type) // only for your custom post type cpt
return;
if ( wp_is_post_revision( $post_id ) )
return;
if ( wp_is_post_autosave( $post_id ) )
return;
if ( !( true == $update && \'publish\' == $post->post_status ) )
return;
remove_action( \'save_post\', \'_20170104_02\' );
$my_post = array(
\'ID\' => $post_id,
\'post_title\' => $post_id,
\'post_name\' => $post_id
);
wp_update_post( $my_post );
}