質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

wordpress で固定ページ毎にコメント項目を変えたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 210

score 2

前提・実現したいこと

wp で固定ページのコメントをカスタマイズしました。表示項目追加、ラジオボタン設定などfunction.phpに設定しました。
固定ページAとC → 項目1,2,3,4,5
固定ページB → 項目1,2,4,5
ここに質問の内容を詳しく書いてください。
テーマはcocoonです。
固定ページA,Cでは 名前、お住い、画像(アバター領域を使って複数のアバターからラジオボタンで画像を選択してコメント欄に表示)、メールアドレス、コメント欄の順に表示しています。
固定ページBでは、画像の選択や表示は不要なので省きたいのです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

```ここに言語名を入力
ソースコード
//
/*コメント項目の追加20210327*/
add_filter( 'comment_form_default_fields', 'add_comment_fields' );
function add_comment_fields( $fields ) {
$fields['jyuu'] = '<p class="comment-form-jyuu"><label for="jyuu">' . __( 'お住まい(都道府県または国)' ) . '</label>' .
'<input id="jyuu" name="jyuu" type="text" size="25" /></p>';
return $fields;
}
//comment-post.phpに設定//
//コメント送信先

add_action( 'comment_post', 'add_comment_meta_values', 1 );
function add_comment_meta_values( $comment_id ) {
if ( isset( $_POST['jyuu'] ) ) {
$jyuu = wp_filter_nohtml_kses( $_POST['jyuu'] );
add_comment_meta( $comment_id, 'jyuu', $jyuu, false );
}
}

//管理画面にコメント追加項目を表示
function manage_comment_columns($columns) {
$columns['jyuu'] = "お住まい";
return $columns;
}
function add_comment_columns($column_name, $comment_id) {
if( $column_name == 'jyuu' ) {
$jyuu = get_comment_meta( $comment_id, 'jyuu', true );
echo attribute_escape($jyuu);
}
}
add_filter( 'manage_edit-comments_columns', 'manage_comment_columns' );
add_action( 'manage_comments_custom_column', 'add_comment_columns',null, 2);

//コメント一覧に追加項目を表示//
add_filter( 'get_comment_author_link', 'attach_area_to_author' );
function attach_area_to_author( $author ) {
$jyuus = get_comment_meta( get_comment_ID(), 'jyuu');
if ( $jyuus ) {
foreach ($jyuus as $jyuu)
$author .= '(' . $jyuu . ')';
}
return $author; //コメント者の後に続けて出力。
}

//スレッドの内容20210327
function thread_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
<div id="comment-<?php comment_ID(); ?>">
<div class="comment-listCon">
<div class="comment-info">
<?php echo get_avatar( $comment, 100 );//アバター画像 ?>
<?php printf('<span class="admin">名前:<cite class="fn comment-author">%s</cite></span> ', get_comment_author_link()); //投稿者の設定 ?>
<?php printf('<span class="required">お住まい:<cite class="fn comment-jyuu">%s</cite></span> ', get_comment_jyuu_link()); //お住まいの設定 ?>
/*            <?php echo get_comment_meta( $comment->comment_ID, ‘jyuu’, true ); ?><br>*/
/*            get_comment_meta($comment->comment_ID, 'jyuu', true) printf( __( '<span>お住まい:</span><cite class="fn">%s</cite>' ), get_comment_meta($comment->comment_ID, 'jyuu', true) );*/
<span class="comment-datetime">投稿日:<?php printf('%1$s %2$s', get_comment_date('Y/m/d(D)'), 
get_comment_time('H:i:s')); //投稿日の設定 ?></span>
<span class="comment-id">
ID:<?php //IDっぽい文字列の表示(あくまでIDっぽいものです。)
$ip01 = get_comment_author_IP(); //書き込んだユーザーのIPアドレスを取得
$ip02 = get_comment_date('jn'); //今日の日付
$ip03 = ip2long($ip01); //IPアドレスの数値化
$ip04 = ($ip02) * ($ip03); //ip02とip03を掛け合わせる
echo mb_substr(sha1($ip04), 2, 9); //sha1でハッシュ化、頭から9文字まで出力
//echo mb_substr(base64_encode($ip04), 2, 9); //base64でエンコード、頭から9文字まで出力
?>
</span>
<span class="comment-reply">
<?php comment_reply_link(array_merge( $args, array(
'depth'   =>$depth,
'max_depth' =>$args['max_depth']))) ?>
</span>
<span class="comment-edit"><?php edit_comment_link('編集','  ',''); //編集リンク ?></span>
</div>
<?php if ($comment->comment_approved == '0') : ?>
<em>あなたのコメントは現在承認待ちです。</em>
<?php endif; ?>
<div class="comment-text"></div>
<?php comment_text(); //コメント本文 ?>

<?php //返信機能は不要なので削除 ?>
</div>
</div>
<?php
}
//お住まいの情報をデータベースに追加する
add_action( 'comment_post', 'save_comment_meta_data_jyuu' );
function save_comment_meta_data_jyuu( $comment_id ) {
$jyuu = explode(',', $_POST['jyuu']);
foreach ($jyuu as $jyuu)
echo update_comment_meta( $comment_id, 'jyuu', $jyuu, true);
}

/*アバター選択制2021.03.28*/
//get_avatarの画像URLを書き換える
function new_get_avatar_data($args,$id_or_email){
$check_avatar =null;
$user = null;
$hash = null;
if($args['found_avatar'] == true){
if ( ! empty( $id_or_email->user_id )){
$user = get_user_by( 'id', (int) $id_or_email->user_id );
$email = $user->user_email;
}

if ( ( ! $user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
$email = $id_or_email->comment_author_email;
}

if(! empty($email)){
$hash = md5( strtolower( trim( $email ) ) );
}

$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
$headers = @get_headers($uri);

if (preg_match("|200|", $headers[0])) {
$check_avatar = TRUE;
}

}

if(!empty($id_or_email)){
$flower = get_comment_meta($id_or_email->comment_ID);}
if(is_object($id_or_email) && isset( $id_or_email->user_id ) && empty($check_avatar) && ! empty($flower)){
$flower = $flower['flower'][0];
if($flower == 'hasu'){

$args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/hasu.png';//ハスの画像
}
elseif($flower == 'bara'){
$args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/baraw.png';//バラの画像
}
elseif($flower == 'kiku'){
$args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/kiku.png';//キクの画像
}
elseif($flower == 'ran'){
$args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/ran.png';//スズランの画像
}
elseif($flower == 'tulips'){
$args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/tulips.png';//チューリップの画像            
}

return $args;

}
else{
return $args;
}
}
add_filter('get_avatar_data','new_get_avatar_data',10,2);

//コメント欄に項目を追加
add_filter( 'comment_form_defaults','change_comment_form_flower');
function change_comment_form_flower($default) {
$commenter = wp_get_current_commenter();    
/***メール入力欄の下に花選択を表示させる*************************/    
/*        $default['fields']['email'] .= '<p class="comment-form-author">' .*/
/*        $default['fields']['jyuu'] .= '<p class="comment-form-jyuu">' .    */
$default['fields']['email'] .= '<p class="comment-form-email">' .            
'<label for="flower">'. __('お花を選んで下さい') .'</label>
<input type="radio" id="flower" class="flower" name="flower" value="hasu">
<label for="hasu">
<img src="https://cft-info.com/wp-content/uploads/2021/03/hasu.png" alt="ハスの画像" width="100" height="100"     border="0">
</label>
<input type="radio" id="flower" class="flower" name="flower" value="bara">
<label for="baraw">
<img src="https://cft-info.com/wp-content/uploads/2021/03/baraw.png" alt="バラの画像" width="100" hight="100"   border="0">     
</label>
<input type="radio" id="flower" class="flower" name="flower" value="kiku">
<label for="kiku">
<img src="https://cft-info.com/wp-content/uploads/2021/03/kiku.png" alt="キクの画像" width="100" height="100"     border="0">
</label>
<input type="radio" id="flower" class="flower" name="flower" value="ran">
<label for="ran">
<img src="https://cft-info.com/wp-content/uploads/2021/03/ran.png" alt="ランの画像" width="100" height="100"     border="0">
</label>
<input type="radio" id="flower" class="flower" name="flower" value="tulips">        
<label for="tulips">
<img src="https://cft-info.com/wp-content/uploads/2021/03/tulips.png" alt="チューリップの画像" width="100" height="100" border="0">
</label>
</p>';
return $default;
}
//ラジオボタンの情報をデータベースに追加する
add_action( 'comment_post', 'save_comment_meta_data_flower' );
function save_comment_meta_data_flower( $comment_id ) {
$flowers = explode(',', $_POST['flower']);
foreach ($flowers as $flower)
echo update_comment_meta( $comment_id, 'flower', $flower, true);
}

// // ステータス(フォーマット)に表示されるアバターのサイズを100x100ピクセルに変更20210407
add_filter( 'twentytwelve_status_avatar', 'my_twentytwelve_status_avatar' );
function my_twentytwelve_status_avatar(){
return 100;
}
// 作成者別(Author)アーカイブに表示されるアバターのサイズ
// シングルページの投稿者情報(部分)に表示されるアバターのサイズ
add_filter( 'twentytwelve_author_bio_avatar_size', 'my_twentytwelve_author_bio_avatar_size' );
function my_twentytwelve_author_bio_avatar_size(){
return 100;
}

試したこと

固定ページのCSSで何とかしようとしましたがうまくいきませんでした。
初心者でfunction.phpもよくわからないまま、試行錯誤してます。
アバターのサイズも大きくしたのですがなりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+4

条件分岐タグ の「WordPressページ」の項目にあるように 現在どのページを表示しているのか判別可能ですので、条件分岐タグを使って判断することで、出しわけはできると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/04/21 00:37

    ありがとうございます。初心者で質問の要領が得なくて、すみません。補足ですが固定ページからボタンで別の固定ページ(コメントページ)飛ぶようになっています。このパターンのページが複数存在してます。
    この先もこの組み合わせのページを増やしていく予定です。
    とりあえず固定ページの条件分岐をやってみます

    キャンセル

  • 2021/04/21 11:25 編集

    function.phpに条件分岐をしました
    タイトルで表示を分けようとしましたがエラーが出てしまいました。
    // タイトルが「Mymessage」または「Mymememorialguestbook」の固定ページで行う処理を書く
    if ( is_page(array('Mymessage','Mymemorialguestbook')) ) {
    /*アバター選択制2021.03.28*/
    //get_avatarの画像URLを書き換える
              function new_get_avatar_data($args,$id_or_email){ ←エラー【syntax error, unexpected 'new_get_avatar_data' (T_STRING)】
              $check_avatar =null;
              $user = null;
              $hash = null;
              if($args['found_avatar'] == true){
                    if ( ! empty( $id_or_email->user_id )){
                   $user = get_user_by( 'id', (int) $id_or_email->user_id );
                   $email = $user->user_email;
                   }

                   if ( ( ! $user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
                   $email = $id_or_email->comment_author_email;
                   }

                   if(! empty($email)){
                   $hash = md5( strtolower( trim( $email ) ) );
                   }

                   $uri = 'http://www.gravatar.com/avatar/&#039; . $hash . '?d=404';
                   $headers = @get_headers($uri);

                   if (preg_match("|200|", $headers[0])) {
                   $check_avatar = TRUE;
                   }
                   }

              if(!empty($id_or_email)){
              $flower = get_comment_meta($id_or_email->comment_ID);}
              if(is_object($id_or_email) && isset( $id_or_email->user_id ) && empty($check_avatar) && !     empty($flower)){
              $flower = $flower['flower'][0];
                   if($flower == 'hasu'){

                   $args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/hasu.png&#039;;//ハスの画像
                   }
                   elseif($flower == 'bara'){
                   $args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/baraw.png&#039;;//バラの画像
                   }
                   elseif($flower == 'kiku'){
                   $args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/kiku.png&#039;;//キクの画像
                   }
                    elseif($flower == 'ran'){
                   $args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/ran.png&#039;;//スズランの画像
                   }
                   elseif($flower == 'tulips'){
                   $args['url'] = 'https://cft-info.com/wp-content/uploads/2021/03/tulips.png&#039;;//チューリップの画像
                   }

                   return $args;

                   }
                   else{
                   return $args;
                   }
                   }
              add_filter('get_avatar_data','new_get_avatar_data',10,2);

    //コメント欄に項目を追加
              add_filter( 'comment_form_defaults','change_comment_form_flower');
              function change_comment_form_flower($default) {
                   $commenter = wp_get_current_commenter();
    /*******メール入力欄の下に花選択を表示させる*****************************/
    /* $default['fields']['email'] .= '<p class="comment-form-author">' .*/
    /* $default['fields']['jyuu'] .= '<p class="comment-form-jyuu">' . */
                   $default['fields']['email'] .= '<p class="comment-form-email">' .
                   '<label for="flower">'. __('お花を選んで下さい') .'</label>
                   <input type="radio" id="flower" class="flower" name="flower" value="hasu">
                   <label for="hasu">
                    <img src="https://cft-info.com/wp-content/uploads/2021/03/hasu.png" alt="ハスの画像" width="100" height="100"     border="0">
                   </label>
                   <input type="radio" id="flower" class="flower" name="flower" value="bara">
                   <label for="baraw">
                    <img src="https://cft-info.com/wp-content/uploads/2021/03/baraw.png" alt="バラの画像" width="100" hight="100"   border="0">
                   </label>
                   <input type="radio" id="flower" class="flower" name="flower" value="kiku">
                   <label for="kiku">
                    <img src="https://cft-info.com/wp-content/uploads/2021/03/kiku.png" alt="キクの画像" width="100" height="100"    border="0">
                   </label>
                   <input type="radio" id="flower" class="flower" name="flower" value="ran">
                   <label for="ran">
                     <img src="https://cft-info.com/wp-content/uploads/2021/03/ran.png" alt="ランの画像" width="100" height="100"     border="0">
                   </label>
                   <input type="radio" id="flower" class="flower" name="flower" value="tulips">
                   <label for="tulips">
                    <img src="https://cft-info.com/wp-content/uploads/2021/03/tulips.png" alt="チューリップの画像" width="100" height="100" border="0">
                   </label>
                   </p>';
                   return $default;
                   }
    //ラジオボタンの情報をデータベースに追加する
              add_action( 'comment_post', 'save_comment_meta_data_flower' );
              function save_comment_meta_data_flower( $comment_id ) {
                   $flowers = explode(',', $_POST['flower']);
                   foreach ($flowers as $flower)
                   echo update_comment_meta( $comment_id, 'flower', $flower, true);
                   }
    }                 

    if ( is_single('Mymemories') ) {}
    タイトルが「Mymemories」の個別ページで行う処理を書く

    キャンセル

  • 2021/04/21 12:32

    ありがとうございました。レベルが変でした修正しました。。無事に分岐できてます。

    キャンセル

  • 2021/04/21 13:05

    解決済にしましたがうまくいってませんでした・・・早とちりしました。

    どの固定ページの場合も、ラジオボタンと画像が表示されません。
    条件分岐できていないようです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る