您可以为(即supplier_id)指定一个新的自定义元字段并创建一个函数来确保此supplier_id 是唯一的。每次提交供应商表单时都会执行此功能。
每当创建或更新帖子或页面时,都会触发操作挂钩 save_post。所以我们可以将它用于此目的。
来自文档:
save_post 是每当创建或更新帖子或页面时触发的操作,可以来自导入、帖子/页面编辑表单、xmlrpc 或通过电子邮件发布。帖子的数据存储在 $_POST、$_GET 或全局 $post_data 中,具体取决于帖子的编辑方式。例如,快速编辑使用 $_POST。
由于此操作在帖子保存后立即触发,因此您可以使用 get_post($post_id) 轻松访问此帖子对象
示例:
function save_supplier_id( $post_id, $post, $update ) {
$post_type = get_post_type($post_id);
if ( "supplier" != $post_type ) return;
if ( isset( $_POST['supplier_id'] ) ) {
$my_supplier_id = $_POST['supplier_id'];
if ( ! is_int( $my_supplier_id ) ) $my_supplier_id = 1;
$all_other_suppliers = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'supplier',
'post__not_in' => array( $post_id )
));
$all_other_ids = array_map( function( $supplier ) { return $supplier->ID; }, all_other_suppliers );
if ( count( $all_other_ids ) && in_array( $my_supplier_id, $all_other_ids ) ) {
// ID is already in use by another supplier, let's create an new one
$my_supplier_id = max( $all_other_ids ) + 1;
}
update_post_meta( $post_id, 'supplier_id', $my_supplier_id ) );
}
}
add_action( 'save_post', 'save_supplier_id', 10, 3 );
解释:
supplier_id 的格式是一个简单的连续数字。如果提供的 id 不是整数,我们将其设置为 1。现在我们获取所有其他供应商 id 并检查给定 id 是否出现两次。如果是这样,我们将获得最大 id 并将其增加 1。