我的自定义书目在每次保存或发布更新时都会被复制

时间:2014-09-01 作者:Jack Ottermans

我有一个问题,每次我保存帖子时,我的自定义标题都会不断被添加。。

首先,我创建了一个名为“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\' );

2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

第一:您的自定义标题后缀被复制可能不是您想要的,但根据您的代码示例,这是预期的行为。

这个save_post action hook都会运行。因此,您的回调每次都会运行。

让我提供两种解决方案:

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\' );

结束

相关推荐