メシのタネ

Webプログラミング 備忘録

  • AWS移行でコケ中

    現在このWebサイトが稼働している、このサーバーのMySQLをマスターとし、AWS上のRDSをスレーブとして、データ移行をしようと思ったが、バイナリロギングの取得が上手くいかない。多分の手順VPSのDBでスレーブ用のユーザ作成バイナリロギングを行うスレーブ側RDSにマスターのDUM[...]

    続きを読む
  • AWS ソリューションアーキテクト アソシエイトに合格しました。

    実は、今日までIT無資格でした。ええ歳だし、そろそろなんか資格取っておくかーと考えだしたので、取って嬉しい資格を取ろうと思ってたところ、AWSの資格あったなーと思って、調べてみたら、みんな14日で受かる!とか言ってるので、じゃあというこで、試験日14日後とかにして、試験の予約入れたのが地獄の始まり[...]

    続きを読む
  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む

【WordPress】コメントで困ったら見て欲しい記事

nekouuuu

WordPressってほんと便利だなーと思います。
DB設計しなくていいし、至れり尽くせりな程便利な関数があるし、
誰が使っても暫くすれば慣れるくらい使い勝手が良いなって思います。
あくまで僕が思うだけかも知れないですけどね。

今回は、固定ページに投稿ID持ってきて
投稿IDのコメントを表示させたり投稿できたりするプログラムを書いた時に
ちょっと困った事をピックアップして書いていきます。

使えるタグとか、メールアドレスの注意表記とか邪魔

コメントを出すと使えるタグは○○ですとか、
メールアドレスが公開されることはありませんとか、
非常に邪魔なので消しました。
これをfunctions.phpに追加してください。

</p>
<p>add_filter(&quot;comment_form_defaults&quot;,&quot;jyama&quot;);<br />
function jyama($args){<br />
    $args['comment_notes_after'] = '';<br />
    $args['comment_notes_before'] = '';<br />
    return $args;<br />
}</p>
<p>

インデックスのcomment_notes_beforeがメール云々で
インデックスのcomment_notes_afterがタグうんちゃらです。

$args[‘comment_notes_after’] = ”;とかに文字入れたら
それが変わりに表示されます。

名前だけ必須入力にする

設定→ディスカッションと進むと
名前とメールアドレスの入力を必須にする

って設定項目あるんですけど、
名前だけ必須ってないんですよね。

なのでこのチェックをはずした後に

</p>
<p>add_filter('preprocess_comment','namerequired',1);<br />
function namerequired($commentdata) {<br />
    if (&quot;&quot; === trim( $commentdata['comment_author']))<br />
        wp_die('名前入れてね。');<br />
    return $commentdata;<br />
}</p>
<p>

これをfunctions.phpに追加します。

wp-comments-post.phpをなんとかしてる記事を書く恐ろしい子達が居ますが
良いこの皆さんは決してwp-comments-post.phpをなんとかしたりはせずに、
functions.phpに書きましょう。
その方が、WordPress作った人は嬉しいはずです。多分。

コメント入力後に戻る場所がsingle.php

comment_form関数の第二引数に投稿IDつっこんでやればOKです。

<br />
comment_form($comments_args,$ID);<br />

固定ページに投稿ID持ってくる方法は知らないので、
私に教えてくれるか、私が組んだヤバそうなプログラムに突っ込むか
したらいいと思います。

元ページに固定ページへのurlと投稿IDを書いてリンクを貼ります。
http://hoge.com/pageslug/$post->ID
みたいな奴を書いてこれの先で

</p>
<p>        $URL = array();<br />
        $URL = explode(&quot;/&quot;,$_SERVER[&quot;REQUEST_URI&quot;]);<br />
        $ID = (int)$URL[2];</p>
<p>

これを書きますが、
ちゃんと$URLを$IDに突っ込む前にdumpした方がいいと思います。

コメントの出力

最もやりやすいのはwp_list_comments関数使うことだと思います。
wp_list_commentsについては

第一引数は
memocarilogさんを参考にしてもらって

第二引数は
フォーラムの大曲さんの回答を参考にしてください。

*第二引数は投稿IDからコメント拾う場合に関係があります。
当たり前かもしれませんが、私は知りませんでした(`ФωФ’)

get_commentsのデータ構造がやや複雑に感じたので、
これはコメント出力用の関数ではないと思います。
一応この返り値の配列を整理して出力は可能だと思いますが、
データ的に親コメントが子コメント持ってるんじゃなくて
子コメントが親コメント持って返ってくるので、
私は出力し辛いなーと感じました。

後、wp_list_comments出力のフォーマットが気に食わない人が居たら

<br />
//これをコメント出したいページに書いて<br />
wp_list_comments(array(&quot;callback&quot; =&gt; &quot;コールバック関数名&quot;));<br />
//functions.phpに<br />
function コールバック関数名($comment, $args, $depth)<br />
{<br />
     $GLOBALS['comment'] = $comment;<br />
     //後適当<br />
}<br />

って書いたらイケると思うので頑張って下さい。

あ、ごめんなさい。avatar出す関数についてもう一個だけ書きたいです。
get_avatar関数は勝手にIMGタグ作って来るので、
このIMGタグの中のclassとか変えたい場合はこうします。

<br />
function コールバック関数名($comment, $args, $depth)<br />
{<br />
     $GLOBALS['comment'] = $comment;<br />
     $size = 64;<br />
     get_avatar($comment,$size);<br />
     //後適当<br />
}</p>
<p>function hack_avatar($avatar,$id_or_email,$size,$default)<br />
{<br />
$tmp = array();<br />
$tmp = explode(&quot;/&quot;,$avatar);<br />
$tmp = explode(&quot; &quot;,$tmp[4]);<br />
$avatarID = $tmp[0];<br />
$avatarHeight = $tmp[5];<br />
$avatarWidth = $tmp[6];</p>
<p>$avatar = &quot;&quot;;<br />
$avatar = '&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/'.$avatarID.'&quot; class=&quot;media-object&quot; '.$tmp[5].' '.$tmp[6].'&gt;';</p>
<p>return $avatar;<br />
}</p>
<p>add_filter('get_avatar','hack_avatar',10,4);</p>
<p>

$avatarにimgタグが入ってくるので、
その中の必要な情報だけ抜き取って、$avatarを初期化します。
で、もっかい$avatar作って返します。

$tmpのインデックスはずれる可能性があるので、
dumpしたりして確認してください。

お付き合いありがとうございます&おつかれさまでしたー。

関連記事

コメントをお待ちしております