我想在WooCommerce上的评论表单中添加一个自定义字段,如下图所示:
我只知道如何通过添加该代码在 single-product-reviews.php 文件上创建新字段:
$comment_form['comment_field'] .= '<p class="comment-form-title"><label for="title">' . esc_html__( 'Review title', 'woocommerce' ) . ' <span class="required">*</span></label><input id="title" name="title" type="text" aria-required="true" required></input></p>';
但是,如何将其保存在数据库中?如何在评论内容之上输出此标题?
修改 我已经尝试了很多方法,直到我通过在我的孩子主题上的functions.php上编写这段代码来实现我想要的东西。
1)添加自定义字段&#34;查看标题&#34;在评论评论表:
function add_review_title_field_on_comment_form() {
echo '<p class="comment-form-title uk-margin-top"><label for="title">' . __( 'Review title', 'text-domain' ) . '</label><input class="uk-input uk-width-large uk-display-block" type="text" name="title" id="title"/></p>';
}
add_action( 'comment_form_logged_in_after', 'add_review_title_field_on_comment_form' );
add_action( 'comment_form_after_fields', 'add_review_title_field_on_comment_form' );
2)将该字段值保存在数据库上的 wp_commentmeta 表中:
add_action( 'comment_post', 'instacraftcbd_review_title_save_comment' );
function instacraftcbd_review_title_save_comment( $comment_id ){
if( isset( $_POST['title'] ) )
update_comment_meta( $comment_id, 'title', esc_attr( $_POST['title'] ) );
}
3)使用以下方法检索该字段输出值:
var $title = get_comment_meta( $comment->comment_ID, "title", true );
echo $title;
现在唯一丢失的东西,如何在评论文本或评论文本之前放置该字段的输出?
答案 0 :(得分:4)
自己找一个解决方案太好了,这是我正在寻找的答案,也许可以帮到你!
1)转到您父母或子主题的functions.php,然后粘贴下面的代码,在评论评论表单上添加自定义字段“评论标题”:
function add_review_title_field_on_comment_form() {
echo '<p class="comment-form-title uk-margin-top"><label for="title">' . __( 'Review title', 'text-domain' ) . '</label><input class="uk-input uk-width-large uk-display-block" type="text" name="title" id="title"/></p>';
}
add_action( 'comment_form_logged_in_after', 'add_review_title_field_on_comment_form' );
add_action( 'comment_form_after_fields', 'add_review_title_field_on_comment_form' );
2)通过在我们的上一个代码上方添加此代码,将该字段值保存在数据库的wp_commentmeta表中:
add_action( 'comment_post', 'save_comment_review_title_field' );
function save_comment_review_title_field( $comment_id ){
if( isset( $_POST['title'] ) )
update_comment_meta( $comment_id, 'title', esc_attr( $_POST['title'] ) );
}
3)如果要检索该字段输出值,请使用以下代码:
var $title = get_comment_meta( $comment->comment_ID, "title", true );
echo $title;
注意:它仅适用于评论循环!
4)要在每个注释文本之前添加该字段输出,您必须在functions.php上创建一个新函数,如下所示:
function get_review_title( $id ) {
$val = get_comment_meta( $id, "title", true );
$title = $val ? '<strong class="review-title">' . $val . '</strong>' : '';
return $title;
}
然后务必将以下代码添加到该WooCommerce模板文件 review.php ,或者您可以使用 woocommerce_review_before_comment_meta 挂钩,但在我的情况下,我已经写过了那段代码:
echo get_review_title( $comment->comment_ID );
之后
do_action( 'woocommerce_review_before_comment_meta', $comment );
我希望能帮到你!