我有一个问题,每次我保存帖子时,我的自定义标题都会不断被添加。。
首先,我创建了一个名为“imac”的自定义帖子类型,外加一个前端表单,用于在此帖子类型中发布帖子,只有在保存之前,我才想根据人们在前端表单上填写的自定义字段更改[“Post\\u title”]。
每个人创建的帖子前端都将获得“挂起”的post\\u状态,但只要我稍后按发布或编辑帖子并按更新,标题也会被添加。例如:示例。com/imac-lala-blabla/been-after-second-save:示例。com/imac拉拉拉拉拉拉拉拉拉拉拉拉拉拉/
谁能帮帮我吗。
function modify_imac_title( $post_id ) {
// [\'post_title\'] create $vars for custom title setup
$ghz = get_post_meta( $post_id, \'imac_processor\', true );
$strip_ghz = preg_replace( \'/z.*$/\', \'z\', $ghz );
$ram = get_post_meta( $post_id, \'imac_ram\', true );
$hd = get_post_meta( $post_id, \'imac_harddrive\', true );
$model = get_post_meta( $post_id, \'imac_model\', true );
global $wpdb;
$wpdb->update( $wpdb->posts,
array(
\'post_title\' => get_the_title( $post_id ).\' \'.$strip_ghz.\' \'.$ram.\'GB \'.$hd.\' \'.$model
),
array( \'ID\' => $post_id )
);
}
add_action( \'save_post_imac\', \'modify_imac_title\' );
最合适的回答,由SO网友:Johannes Pille 整理而成
第一:您的自定义标题后缀被复制可能不是您想要的,但根据您的代码示例,这是预期的行为。
这个save_post
action hook每次创建或更新帖子(或页面)时,em>都会运行。因此,您的回调每次都会运行。
让我提供两种解决方案:
1使用wp_insert_post
相反,操作wp_insert_post
使用与save\\u post操作(正在创建的帖子的帖子ID)相同的参数调用操作,但仅在新帖子和之后调用save_post
已运行。
注意,这个钩子没有特定于posttype的等价物,因此您必须检查回调函数中的类型。
function modify_imac_title( $post_id ) {
if ( \'imac\' === $_POST[\'post_type\'] ) {
// do your thing
}
}
add_action( \'wp_insert_post\', \'modify_imac_title\' );
2。添加一个布尔post\\u meta
添加一个布尔post\\u meta,表示标题修改是否已经运行。
function modify_imac_title( $post_id ) {
$title_modified = get_post_meta( $post_id, \'title_modified\', true );
if ( ! $title_modified ) {
update_post_meta( $post_id, \'title_modified\', true );
// do your thing
}
}
add_action( \'save_post_imac\', \'modify_imac_title\' );
SO网友:Silenced
我还不能发表评论,所以我会尽量猜测被复制的是帖子,而不仅仅是帖子标题。
尝试以下操作:
function modify_imac_title( $post_id ) {
// [\'post_title\'] create $vars for custom title setup
$ghz = get_post_meta( $post_id, \'imac_processor\', true );
$strip_ghz = preg_replace( \'/z.*$/\', \'z\', $ghz );
$ram = get_post_meta( $post_id, \'imac_ram\', true );
$hd = get_post_meta( $post_id, \'imac_harddrive\', true );
$model = get_post_meta( $post_id, \'imac_model\', true );
global $wpdb;
remove_action( \'save_post_imac\', \'modify_imac_title\');
$wpdb->update( $wpdb->posts,
array(
\'post_title\' => get_the_title( $post_id ).\' \'.$strip_ghz.\' \'.$ram.\'GB \'.$hd.\' \'.$model
),
array( \'ID\' => $post_id )
);
add_action( \'save_post_imac\', \'modify_imac_title\');
}
add_action( \'save_post_imac\', \'modify_imac_title\' );