当创建唯一帖子但不更新/保存/删除时,我可以使用哪个钩子

时间:2021-02-02 作者:TomC

我想在自定义字段中为CPT设置一个数字计数器,有点像post ID,但只针对该自定义post类型,从1开始。我试图在第一次创建帖子时,从选项中的递增值开始设置自定义字段值。

我试图在新帖子保存时调用此函数并递增,但当帖子保存/更新时,它会继续写入它,等等,所以我使用了错误的钩子,但似乎找不到正确的钩子。

// Maintain Asset register count in Options Table and assign to new assets
function define_asset( $post_id, $post ) {
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    if ( ! current_user_can( \'edit_post\', $post_id ) ) return;
    global $wpdb;
    $isAsset = get_post_meta($post_id, \'assetID\', false);
    if ($isAsset ) {
        if(get_option(\'assetID\')){
        $count = get_option(\'assetID\', true);
        update_option(\'assetID\', $count+1);
        $assetID = get_option(\'assetId\');
        str_pad($assetID, 5, \'0\', STR_PAD_LEFT);
        } else {
        /** This will automatically add the option if it does not exist. **/
        update_option(\'assetID\', 1); // adding first time as value 1
        }
        $assetID = str_pad($assetID, 5, \'0\', STR_PAD_LEFT);
        update_post_meta( $post_id, \'assetID\', $assetID );
    }
}
//add_action( \'post_updated\',  \'define_asset\', 20, 2 ); 
add_action( \'save_post\', \'define_asset\', 20, 2 ); // This works but increments on each save
//add_action( \'publish_post\', \'define_asset\', 20, 2 ); // This works but increments on each save
//add_action( \'publish_inventory\',  \'define_asset\', 20, 2 ); // 
//add_action( \'draft_to_published\',  \'define_asset\', 20, 2 ); // This doesn\'t work

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

这个save_post hook 具有第三个参数,名为$update, 因此,您可以使用它来检查帖子是否正在创建而未更新。

function define_asset( $post_id, $post, $update ) {
    if ( $update ) {
        return;
    }

    // else, run your code...
}
add_action( \'save_post\', \'define_asset\', 20, 3 );

相关推荐

我在wp_Options表(PhpMyAdmin)中看不到site_url和home_url字段?

我想向你展示这个问题。这是我10年职业生涯中的第一次,过去我曾将许多站点克隆到另一个域,但这是我第一次在Wp\\U选项(phpmyadmin)下看不到“站点URL和主页选项”这是我克隆的域名https://13cabsonline.com.au这是目标域https://silverservice.sydney/我已经通过备份小部件下载并还原了文件。上载文件管理器+数据库,并将数据库与用户连接。但问题是,我无法在phpmyadmin中的Wp\\u options下找到选项。For example: 正常的外