如何创建唯一的参考号码 - wordpress

时间:2016-09-30 06:42:02

标签: php wordpress

我有供应商,他们有自己的产品。 WP后端几乎经过重新设计,我有一个页面(带有表单),其中'admin'可以添加新供应商,我需要在提交表单时为每个供应商创建唯一的参考编号。

另外,我有一个“排序方式”下拉列表,其中一个排序选项是“参考编号”。

首先,我想使用POST ID作为参考号,但不要认为这可能是最佳解决方案,因为当删除某些帖子时,POST ID会有所不同。此外,我还在考虑使用uniqid()函数,只有一些数字限制,只有数字。

最好能达到此目的?有什么想法吗?

1 个答案:

答案 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。