サポート » 使い方全般 » wordpressの記事に対してのコメントをカスタマイズしたい

  • 解決済 sensensen

    (@sensensen)



    いつもお世話になっております、
    コメントをカスタマイズする方法は引数などの設定で変更できると分かりましたが、
    新しく値を追加するようなことはできないでしょうか?

    例えば

    メールアドレス
    名前
    血液型
    コメント

    のように
    血液型を入力できる、ラジオボタンの設置など。

    プラグインや何でも構いません。
    教えて頂けると幸いです。
    どうぞよろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは、

    ageというテキストフィールドを、コメントに追加する例です

    functions.php

    <?php
    /**
     * Set extend field for comment
     *
     *
     *
     */
    	add_filter('comment_form_default_fields','add_comment_fields',11);
    
    	function add_comment_fields($fields) {
    
    		$my_comment_id = get_comment_ID(); 
    
    		$my_exten_field_html = '<p class="comment-form-age"><label for="%1$s">%2$s</label><input id="age" name="%1$s" type="text" size="30" value="%4$s" />%3$s</p>';
    
    		$fields['age']= sprintf( $my_exten_field_html
    								, 'age'
    								, __( 'Age','your-theme-name' )
    								, esc_attr( $commenter['age'] )
    								, get_comment_meta( $my_comment_id, 'age', true )
    							);
    		return $fields;
    	}
    
    /**
     * Save extend field for comment
     *
     *
     *
     */
    	add_action( 'comment_post', 'add_custom_comment_field' );
    
    	function add_custom_comment_field( $comment_id ) {
    
    		$age = esc_html( $_POST['age'] );
    
    		add_comment_meta( $comment_id, 'age', $age );
    	}
    
    /**
     * Display extend field for comment with template
     *
     *
     *
     */
    
    /*<?php
    		$my_comment_id = get_comment_ID();
    		echo get_comment_meta( $my_comment_id, 'age', true );
    
    ?>*/

    ご連絡ありがとうございます!
    早速functions.phpに記述し、
    single.phpに<?php comments_template(); ?>
    を記述いたしましたが、
    ageというフィールドは表示することができませんでした。
    <?php comments_template(); ?>
    では表示することはできないのでしょうか、、、、

    ご連絡お待ちしております

    ageというフィールドは表示することができませんでした。

    WordPressの環境により、フィルターの実行タイミングを調整しなければならない場合があるようです。

    提示したコードは、ローカル環境のWordPress3.6で、テスト済みですが、念のため異なる環境の、WordPress3.6(マルチサイト3.6)でテストしたところ、sensensenさんのおっしゃるように、フィールドを追加できない現象を確認しました。

    以下のように、フィルタの実行タイミングを変更したところ、動作していますので、参考にしてください

    add_action( 'init', 'comment_init' );
    function comment_init(){
        add_filter('comment_form_default_fields','add_comment_fields',5);
        add_action( 'comment_post', 'add_custom_comment_field' );
    }

    コードの動作は、以下で確認できます

    http://tenman.info/labo/snip/archives/1899

    nobitaさま
    素早いご連絡ありがとうございました。

    参考させていただいたサイト
    http://tenman.info/labo/snip/archives/1899

    を拝見し、
    まずは
    functions.phpに

    <?php
    add_action( 'init', 'comment_init' );
    function comment_init(){
     add_filter('comment_form_default_fields','add_comment_fields',5);
     add_action( 'comment_post', 'add_custom_comment_field' );
    }
    
    function remove_comment_fields($fields) {
     unset($fields['url']);
     return $fields;
    }
    add_filter('comment_form_default_fields','remove_comment_fields',10);

    を記述し、
    ソースを見ると、コメントのデフォルトである、
    ウェブサイトを削除してくれるのかと思いましたが、

    single.phpで
    <?php comments_template(); ?>
    を記述し、出力された内容に
    特に変化はございませんでした。

    ・名前 (必須)
    ・メールアドレス (非公開) (必須)
    ・ウェブサイト
    ・コメント

    が表示されております。

    add_filterの第3引数の調節なども行ってみましたが、
    今一動作いたしません、、、

    記述している箇所などに誤りがあるのでしょうか?

    ご連絡お待ちしております、

    add_filter('comment_form_default_fields','remove_comment_fields',10);

    が2度記述されていますが、削除してください

    add_action( 'comment_post', 'add_custom_comment_field' );

    も書いてあるのであれば、削除してください

    コードはあくまで、動作を確認するサンプルなので、実装に当たっては、さらに いろいろと必要な修正もあると思いますので、Codexなどで、フィルタの動作などをよく理解したうえで、行ってください 🙂

    お世話になっております。
    sensenです。
    迅速なご回答誠にありがとうございます。

    そもそも、
    single.phpに
    <?php comments_template(); ?>
    を記述して表示していたのに誤りがありました、、、
    <?php comment_form(); ?>
    に変更し、
    nobitaさんのサンプルコードを参考にしたところ、
    無事、ageフィールドが表示されました!

    あとはcodexなど資料を参考にして、
    色々カスタマイズして行こうと思います!

    どうもありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「wordpressの記事に対してのコメントをカスタマイズしたい」には新たに返信することはできません。