【问题标题】:how to create unique reference number - wordpress如何创建唯一的参考号 - wordpress
【发布时间】:2016-09-30 06:42:01
【问题描述】:

我的供应商有自己的产品。 WP 后端几乎重新设计,我有一个页面(带有表单),“管理员”可以在其中添加新供应商,并且在提交表单时我需要为每个供应商创建唯一的参考号。

另外,我有一个“排序依据”下拉菜单,其中一个排序选项是“参考编号”。

起初,我想使用 POST ID 作为参考编号,但不认为这是最好的解决方案,因为当某些帖子被删除时,POST ID 会有所不同。我也在考虑使用 uniqid() 函数,它有一些数字限制并且只有数字。

实现这一目标的最佳方法是什么?有什么想法吗?

【问题讨论】:

    标签: php wordpress


    【解决方案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 );
    

    解释: supplier_id 的格式是一个简单的连续数字。如果提供的 id 不是整数,我们将其设置为 1。现在我们获取所有其他供应商 id 并检查给定 id 是否出现两次。如果是这样,我们将获得最大 id 并将其增加 1。

    【讨论】:

    • 并使用 uniqid() 生成数字? @Andy Tschiersch
    • IMO 一个三位数的连续数字就足够了。
    • 你有一些关于如何做到这一点的例子吗? @Andy Tschiersch
    • 我已将我的答案扩展到一个示例。
    猜你喜欢
    • 2012-07-18
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多