【问题标题】:Get alll customer mobile phone numbers in Woocommerce在 Woocommerce 中获取所有客户的手机号码
【发布时间】:2018-07-18 19:48:09
【问题描述】:

我想将用户的所有电话号码循环到一个输入字段中。到目前为止,我在以下方面没有任何运气:

<?php for get_user_meta('phone_number',true); { echo $phone; "," } ?>

我试图将它们列为07812345678, 07812345678, 07812345678, 等...直到最后一个没有“,”的数字。有人能帮我吗?如果这有什么不同,这将在管理仪表板的主页上执行...

【问题讨论】:

    标签: php wordpress woocommerce phone-number user-data


    【解决方案1】:

    您可以使用这个使用非常轻量级的 sql 查询的自定义短代码来获取 所有“客户” 用户角色 “计费电话”号码 作为逗号分隔的数字字符串手机

    如果您使用的是自定义电话号码自定义字段,您只需将函数中的billing_phone 替换为您的自定义字段段(例如phone_number

    add_shortcode( 'customers_phones', 'get_customers_phone' );
    function get_customers_phone(){
        global $wpdb;
    
        $results = $wpdb->get_col( "
            SELECT DISTINCT um.meta_value FROM {$wpdb->prefix}users as u
            INNER JOIN {$wpdb->prefix}usermeta as um ON um.user_id = u.ID
            INNER JOIN {$wpdb->prefix}usermeta as um2 ON um2.user_id = u.ID
            WHERE um.meta_key LIKE 'billing_phone' AND um.meta_value != ''
            AND um2.meta_key LIKE 'wp_capabilities' AND um2.meta_value NOT LIKE '%administrator%'
        " );
    
        // return a coma separated string of "customer" billing phones numbers
        return implode( ', ', $results );
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    USAGE - 显示电话号码逗号分隔字符串:

    1. 在任何接受简码的 Wordpress 帖子或页面文本编辑器中:

      [customers_phones]
      
    2. 内部php代码

      echo do_shortcode("[customers_phones]");
      
    3. php 文件中的内部 html 代码

      <?php echo do_shortcode("[customers_phones]"); ?>
      

    下面是一个不针对“客户”用户角色的替换版本:

    add_shortcode( 'customers_phones', 'get_customers_phone' );
    function get_customers_phone(){
        global $wpdb;
    
        $results = $wpdb->get_col( "
            SELECT DISTINCT um.meta_value FROM {$wpdb->prefix}users as u
            INNER JOIN {$wpdb->prefix}usermeta as um ON um.user_id = u.ID
            WHERE um.meta_key LIKE 'billing_phone' AND um.meta_value != ''
        " );
    
        // return a coma separated string of "customer" billing phones numbers
        return implode( ', ', $results ); 
    }
    

    【讨论】:

    • 谢谢,我这样做了,它没有输出任何东西?也许元数据有不同的名称?
    • 不,billing_phone 是正确的...我不知道为什么它不起作用。我做了以上所有事情?
    • 是的,刚刚试过。它正在尝试做一些事情,因为简码消失并且没有显示,但它也没有输出任何东西...... :(
    • 也许试试“订阅者”角色而不是“客户”角色?我该如何更改?
    • @NathanWinch 看这是我测试服务器上特定页面上的简码(我只有几个客户):cbleu.net/sites/wc34/my-wardrobe
    【解决方案2】:

    如果您的输入数据已经在一个数组中,那么您可以使用implode()。这将使用指定的分隔符连接数组的所有项目。

    echo implode(', ', get_user_meta('phone_number',true));
    

    【讨论】:

    • 我不确定它们是否在数组中?
    • 我该怎么做? :)
    【解决方案3】:

    我知道很久以前有人问过这个问题,但我会发布对我有用的内容。

    要从 Woocommerce 的结帐表单中选择所有保存为计费电话的电话号码,您可以使用如下函数:

    /**
     * Get billing phone numbers, join them by a comma and return them as a string.
     */
    function customer_loyalty_with_twilio_get_customers_phone(){
        global $wpdb;
    
        // use $wpdb to make a query directly to the database
        $results = $wpdb->get_col("
            SELECT DISTINCT `meta_value` FROM `{$wpdb->prefix}usermeta` WHERE `meta_key` = 'billing_phone' and `meta_value` != '';
        ");
    
        // return a coma separated string of "customer" billing phones numbers
        return implode( ',', $results );
    }
    

    其工作方式是使用数据库访问抽象类$wpdb。 SQL 查询从表 {$wpdb->prefix}postmeta 中选择所有 DISTINCT meta_value(如果您的表以“wp_”为前缀,则该表将被称为 wp_postmeta)。查询过滤meta_key 列等于“_billing_phone”的结果。我添加了最后一个条件and `meta_value` != '',以排除空记录。

    希望这对某人有用。

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 2019-04-29
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      相关资源
      最近更新 更多