
WordPressってほんと便利だなーと思います。
DB設計しなくていいし、至れり尽くせりな程便利な関数があるし、
誰が使っても暫くすれば慣れるくらい使い勝手が良いなって思います。
あくまで僕が思うだけかも知れないですけどね。
今回は、固定ページに投稿ID持ってきて
投稿IDのコメントを表示させたり投稿できたりするプログラムを書いた時に
ちょっと困った事をピックアップして書いていきます。
INDEX
使えるタグとか、メールアドレスの注意表記とか邪魔
コメントを出すと使えるタグは○○ですとか、
メールアドレスが公開されることはありませんとか、
非常に邪魔なので消しました。
これをfunctions.phpに追加してください。
add_filter("comment_form_defaults","jyama"); function jyama($args){ $args['comment_notes_after'] = ''; $args['comment_notes_before'] = ''; return $args; }
インデックスのcomment_notes_beforeがメール云々で
インデックスのcomment_notes_afterがタグうんちゃらです。
$args['comment_notes_after'] = '';とかに文字入れたら
それが変わりに表示されます。
名前だけ必須入力にする
設定→ディスカッションと進むと
名前とメールアドレスの入力を必須にする
って設定項目あるんですけど、
名前だけ必須ってないんですよね。
なのでこのチェックをはずした後に
add_filter('preprocess_comment','namerequired',1); function namerequired($commentdata) { if ("" === trim( $commentdata['comment_author'])) wp_die('名前入れてね。'); return $commentdata; }
これをfunctions.phpに追加します。
wp-comments-post.phpをなんとかしてる記事を書く恐ろしい子達が居ますが
良いこの皆さんは決してwp-comments-post.phpをなんとかしたりはせずに、
functions.phpに書きましょう。
その方が、WordPress作った人は嬉しいはずです。多分。
コメント入力後に戻る場所がsingle.php
comment_form関数の第二引数に投稿IDつっこんでやればOKです。
comment_form($comments_args,$ID);
固定ページに投稿ID持ってくる方法は知らないので、
私に教えてくれるか、私が組んだヤバそうなプログラムに突っ込むか
したらいいと思います。
元ページに固定ページへのurlと投稿IDを書いてリンクを貼ります。
https://hoge.com/pageslug/$post->ID
みたいな奴を書いてこれの先で
$URL = array(); $URL = explode("/",$_SERVER["REQUEST_URI"]); $ID = (int)$URL[2];
これを書きますが、
ちゃんと$URLを$IDに突っ込む前にdumpした方がいいと思います。
コメントの出力
最もやりやすいのはwp_list_comments関数使うことだと思います。
wp_list_commentsについては
第一引数は
memocarilogさんを参考にしてもらって
第二引数は
フォーラムの大曲さんの回答を参考にしてください。
*第二引数は投稿IDからコメント拾う場合に関係があります。
当たり前かもしれませんが、私は知りませんでした(`ФωФ')
get_commentsのデータ構造がやや複雑に感じたので、
これはコメント出力用の関数ではないと思います。
一応この返り値の配列を整理して出力は可能だと思いますが、
データ的に親コメントが子コメント持ってるんじゃなくて
子コメントが親コメント持って返ってくるので、
私は出力し辛いなーと感じました。
後、wp_list_comments出力のフォーマットが気に食わない人が居たら
//これをコメント出したいページに書いて wp_list_comments(array("callback" => "コールバック関数名")); //functions.phpに function コールバック関数名($comment, $args, $depth) { $GLOBALS['comment'] = $comment; //後適当 }
って書いたらイケると思うので頑張って下さい。
あ、ごめんなさい。avatar出す関数についてもう一個だけ書きたいです。
get_avatar関数は勝手にIMGタグ作って来るので、
このIMGタグの中のclassとか変えたい場合はこうします。
function コールバック関数名($comment, $args, $depth) { $GLOBALS['comment'] = $comment; $size = 64; get_avatar($comment,$size); //後適当 } function hack_avatar($avatar,$id_or_email,$size,$default) { $tmp = array(); $tmp = explode("/",$avatar); $tmp = explode(" ",$tmp[4]); $avatarID = $tmp[0]; $avatarHeight = $tmp[5]; $avatarWidth = $tmp[6]; $avatar = ""; $avatar = '<img alt="" src="https://0.gravatar.com/avatar/'.$avatarID.'" class="media-object" '.$tmp[5].' '.$tmp[6].'>'; return $avatar; } add_filter('get_avatar','hack_avatar',10,4);
$avatarにimgタグが入ってくるので、
その中の必要な情報だけ抜き取って、$avatarを初期化します。
で、もっかい$avatar作って返します。
$tmpのインデックスはずれる可能性があるので、
dumpしたりして確認してください。
お付き合いありがとうございます&おつかれさまでしたー。