我有供应商,他们有自己的产品。 WP后端几乎经过重新设计,我有一个页面(带有表单),其中'admin'可以添加新供应商,我需要在提交表单时为每个供应商创建唯一的参考编号。
另外,我有一个“排序方式”下拉列表,其中一个排序选项是“参考编号”。
首先,我想使用POST ID作为参考号,但不要认为这可能是最佳解决方案,因为当删除某些帖子时,POST ID会有所不同。此外,我还在考虑使用uniqid()
函数,只有一些数字限制,只有数字。
最好能达到此目的?有什么想法吗?
答案 0 :(得分:1)
您可以为(即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 );
<强> Explantion:强>
supplier_id
的格式很简单,是一个连续的数字。如果提供的id不是整数,我们将其设置为1.现在我们获取所有其他供应商ID并检查给定ID是否出现两次。如果是这样,我们得到最大id并将其增加1。