web-dev-qa-db-ja.com

WooCommerceはComment Adminにカスタムのcomment_typeをどのように表示しますか?

カスタムコメントタイプを作成する方法について、過去数年間にわたって多くのスレッドとトピックがありました。ほとんどの部分で私はそれが可能であると理解しています(WooCommerceがそれを実行するので)が、代わりにcomment_metaを使用することをお勧めします。

私の質問は、WooCommerceがComment Administrationのドロップダウンにcomment_typeorder_noteをどのように追加するかです。

WooCommerceのコードの反省は何も役に立ちません。どんな方向でも大歓迎です。

order_noteの型のコメントを追加する例:

/**
 * Adds a note (comment) to the order
 *
 * @access public
 * @param string $note Note to add
 * @param int $is_customer_note (default: 0) Is this a note for the customer?
 * @return id Comment ID
 *
 * *file is class-wp-order.php*
 */
public function add_order_note( $note, $is_customer_note = 0 ) {

    $is_customer_note = intval( $is_customer_note );

    if ( is_user_logged_in() && current_user_can( 'manage_woocommerce' ) ) {
        $user                 = get_user_by( 'id', get_current_user_id() );
        $comment_author       = $user->display_name;
        $comment_author_email = $user->user_email;
    } else {
        $comment_author       = __( 'WooCommerce', 'woocommerce' );
        $comment_author_email = strtolower( __( 'WooCommerce', 'woocommerce' ) ) . '@';
        $comment_author_email .= isset( $_SERVER['HTTP_Host'] ) ? str_replace( 'www.', '', $_SERVER['HTTP_Host'] ) : 'noreply.com';
        $comment_author_email = sanitize_email( $comment_author_email );
    }

    $comment_post_ID        = $this->id;
    $comment_author_url     = '';
    $comment_content        = $note;
    $comment_agent          = 'WooCommerce';
    $comment_type           = 'order_note';
    $comment_parent         = 0;
    $comment_approved       = 1;
    $commentdata            = apply_filters( 'woocommerce_new_order_note_data', compact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_agent', 'comment_type', 'comment_parent', 'comment_approved' ), array( 'order_id' => $this->id, 'is_customer_note' => $is_customer_note ) );

    $comment_id = wp_insert_comment( $commentdata );

    add_comment_meta( $comment_id, 'is_customer_note', $is_customer_note );

    if ( $is_customer_note )
        do_action( 'woocommerce_new_customer_note', array( 'order_id' => $this->id, 'customer_note' => $note ) );

    return $comment_id;
}

前の質問:現在作業中のプロジェクトは、必要に応じてcomment_typeに加えてcomment_metaを追加できれば、はるかに簡単になります。私の質問は、私がこれを行う方法についてのガイド/例をどこで探すべきであるということですか?

1
torinagrippa

あなたの最初の質問に答えるには:"WooCommerceはComment Administrationのドロップダウンにcomment_typeorder_noteをどのように追加しますか?" woocommerce-admin-init.phpから:

function woocommerce_admin_comment_types_dropdown( $types ) {
    $types['order_note'] = __( 'Order notes', 'woocommerce' );
    return $types;
}

add_filter( 'admin_comment_types_dropdown', 'woocommerce_admin_comment_types_dropdown' );

もちろん、あなたは次のように衝突を避けるためにあなた自身の努力をしなければなりません:

add_filter( 'admin_comment_types_dropdown', 'wpse114725_admin_comment_types_dropdown' );
function wpse114725_admin_comment_types_dropdown( $types ) {
    //replace the 'your...'-parts as needed
    $types['your_note_type'] = __( 'Your Note Type', 'your-text-domain' );
    return $types;
}



あなたの2番目の、前の質問に関して:"これを行う方法についてのガイド/例をどこで探すべきですか?"。その外観から、あなたはwoocommerceファイルからかなり良い例を得ることができます。

それ以外に、必要な関数はすべて文書化されています。例えば、 wp_insert_commentwp_update_comment および wp_delete_comment 。それはおそらくコーデックスの最も包括的な部分ではありませんが、重要な情報はそこにあります、もちろんあなたはいつでもソースを見ることができます: wp-includes/comment.php .

あなたが書いたものから、私はあなたがcomment meta、すなわちadd_comment_meta()get_comment_meta()update_comment_meta()そしてdelete_comment_meta()であなたのやり方を知っていると仮定します - あなたはコーデックスでそれらを見つけることもできます、ソースファイルは上でリンクされるのと同じです。

あなたが解決するための本当の問題を投稿していないので、私はそれがちょうどそれについてだと言うでしょう - もちろんそれは全くそれではありません、しかしこれはあなたがどこから始めるべき良い概観を得るべきです。

あなたは 管理者パネルの「コメント」にフィルタを追加するにはどうすればいいですか? @ brasofiloの答えを見てみたいと思うかもしれません。あなたを導くためのキーワード。

5
Nicolai