【问题标题】:How to add custom fields to comments form in WordPress/WooCommerce 3+如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段
【发布时间】:2019-07-17 21:54:39
【问题描述】:

我正在尝试在产品 cmets (WooComerce 3+) 中添加“电话”字段。 *也适用于未注册用户(客人)。 电话号码只能由管理员在管理面板中看到。

*电话字段需要设为“必填”。

我试过这段代码,但这不起作用:

function true_phone_number_field( $fields ) {
$fields['phone'] = '<p class="comment-form-phone"><label for="phone">Phone</label> <input id="phone" name="phone" type="text" value="" size="30" /></p>';
}
add_filter( 'comment_form_default_fields', 'true_phone_number_field');

【问题讨论】:

  • 愚蠢的问题:你知道在你的函数声明之后你错过了一个关闭的}吗?这可能是因为您只是没有将 } 复制到 SO 中,但如果这是在您的实际代码中,那会导致一些问题。不过,我敢肯定这只是一个错字。
  • @Chipster,是的,但感谢您注意到一个错字。;)
  • @АлександраКузнецова 没问题。通常就是这样,但我总是喜欢检查以防万一。你永远不知道真正了解这些事情:D

标签: php wordpress woocommerce custom-fields review


【解决方案1】:
    // Add phone number field

    function add_review_phone_field_on_comment_form() {
        echo '<p class="comment-form-phone uk-margin-top"><label for="phone">' . __( 'Phone', 'text-domain' ) . '</label><span class="required">*</span><input class="uk-input uk-width-large uk-display-block" type="text" name="phone" id="phone"/></p>';
    }
    add_action( 'comment_form_logged_in_after', 'add_review_phone_field_on_comment_form' );
    add_action( 'comment_form_after_fields', 'add_review_phone_field_on_comment_form' );


    // Save phone number
    add_action( 'comment_post', 'save_comment_review_phone_field' );
    function save_comment_review_phone_field( $comment_id ){
        if( isset( $_POST['phone'] ) )
          update_comment_meta( $comment_id, 'phone', esc_attr( $_POST['phone'] ) );
    }

    function print_review_phone( $id ) {
        $val = get_comment_meta( $id, "phone", true );
        $title = $val ? '<strong class="review-phone">' . $val . '</strong>' : '';
        return $title;
    }

    // Print phone number - remove if not needed to show in front end
/*
    add_action('woocommerce_review_before_comment_meta', 'get_comment_phone' );
    function get_comment_phone($comment){
        echo print_review_phone($comment->comment_ID);
    }
*/

// 管理列表中的列表

add_filter('manage_edit-comments_columns', 'my_add_comments_columns');

function my_add_comments_columns($my_cols) {

    $temp_columns = array(
        'phone' => 'Phone'
    );
    $my_cols = array_slice($my_cols, 0, 3, true) + $temp_columns + array_slice($my_cols, 3, NULL, true);

    return $my_cols;
}

add_action('manage_comments_custom_column', 'my_add_comment_columns_content', 10, 2);

function my_add_comment_columns_content($column, $comment_ID) {
    global $comment;
    switch ($column) :

        case 'phone' : {

                echo get_comment_meta($comment_ID, 'phone', true);
                break;
            }
    endswitch;
}

使用 WordPress 5.1 和 WooCommerce 3.5.5

测试正常

【讨论】:

  • 谢谢!我检查了。但是管理面板需要一个电话号码。在网站上它不应该是可见的。
  • 你的意思是你需要在review form和cmets listing中使用它,而不是在前端review list中?
  • 是的,电话号码只能由管理员在管理面板中看到。在前端,必须提供电话号码才能发表评论。
【解决方案2】:

您的代码应该生成一个输入字段,但它可能看起来没有,因为您使用的comment_form_default_fields filter 用于默认注释字段,如果您登录,这些字段将被隐藏。电话字段应该在您注销后出现并查看产品 cmets。

此外,您没有提供将输入字段的值保存到数据库的任何逻辑。如果您想自己实现此功能,我认为this article 会有所帮助。

但是,当您使用advanced-custom-fields 标记您的问题时,您可能希望跳过编码并让Advanced Custom Fields plugin 处理添加输入字段并将电话号码保存到数据库中。为此,只需下载并激活插件,转到自定义字段菜单,添加新字段组,然后创建电话输入字段。确保查看位置元框并创建一个规则,仅在 Comment is equal to Product 时显示字段组:

这会自动将您的字段组中的字段添加到产品的评论字段中。

【讨论】:

    【解决方案3】:

    您必须在函数末尾返回名为“fields”的变量。

    function true_phone_number_field( $fields ) {
    $fields['phone'] = '<p class="comment-form-phone"><label for="phone">Phone</label> <input id="phone" name="phone" type="text" value="" size="30" /></p>';
    
     return $fields;
    }
    add_filter( 'comment_form_default_fields', 'true_phone_number_field');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2017-07-09
      • 2013-07-27
      • 2012-02-01
      • 1970-01-01
      • 2021-12-01
      • 2013-01-14
      相关资源
      最近更新 更多