FC2ブログ
-------- (--) | Edit |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2011-11-12 (土) | Edit |
ワードプレスで自動投稿システム作って遊んでたらある日見るとタグが死んでることに。

自動記事生成でソースを2ちゃんとかから引っ張ってくるとどうしてもAAなどが邪魔して不具合を起こすことは多くの方が悩んでおられることだろう。

んでよーくソースを見てみると、どうやらクォート文字が& #8221;とか& #8243;とかに変換されている。

ちなみに管理画面でHTMLを確認してみるとちゃんと表示されている。

これは記事のコンテンツを出力するあたりで何か起こってるなと思い探してみると、こいつ。


formatting.php


どうやらこいつが悪さしてるらしい。

こいつの役目は記事HTMLソースを無害化して出力させるための文字列置換らしいが、他のブロガーさんたちもこいつに対しては多くが頭を抱えているらしい。


で、肝心の解決策であるが、これはもう最終手段をとることにした。

このPHPファイルの最初の関数wptexturize($text)

こいつを無機能化。


具体的に言うと、そのままただ$textを返すだけの関数にして中の機能をコメントアウトしたのだ。

もちろん、これでどんな不具合を起こすか知れたもんではないし、お勧め出来た方法でないことは確かだが、とりあえず他に解決策がないのでこの手法をとることにした。

ワードプレスは他のCMSに比べて圧倒的にバグが少ないと思う。

いや、正確に言うと、バグを認識する能力とでも言うか、普通なら問答無用で止まってしまうようなエラーを無理矢理抑え込んででもサイト表示させる根性には見上げたもんがある。


その堅牢さを支えているのが他でもないこのformatting.phpなのだろうが…。


まぁバックリンクサイトとかただのブログだったらいいが、自分以外のユーザーが投稿出来る状態にあるか、HTMLや特殊文字に関して知識が乏しい方は今回の方法はやめた方が得策だろう…
スポンサーサイト
2011-11-12 (土) | Edit |
ワードプレスでタグの管理を楽にしてくれるプラグインは数あれど、「そもそもダッシュボードにいちいちログインするのが面倒臭い」というのは多くの人が抱える(?)悩みであろう。

そこでやっぱ個別の記事ページ、つまりクライアント側で処理出来るようになればと思って関数を探すのだがこれがなかなか見つからない。

まず試したのが、普通にwp_update_post()で、"tags_input"パラメータに配列で値を渡して投稿記事を更新してみるも、うまく行かず。

入力したタグは生成はされるものの、個別の記事に関連付けられることはないようだ。

そもそもタグとはそれ一つとっても親タグ、子タグ、スラッグ、ディスクリプションと様々なパラメータがあり、これはちょこっとプログラム書き足したくらいで簡単に生成・挿入はおこがましいか…

と諦めかけてたら、

あった。

wp_set_post_tag()

まさに求めていた関数ともいうべきか…

まだ日本語ページは和訳が進んでないようで、個人的には需要はあるかと思うので一応説明を。


使い方は至ってシンプル。

wp_set_post_tags( $post_ID, $tags, $append );

挿入したい投稿のID、追加(もしくは更新)したいタグを配列、またはカンマで区切られた文字列にして渡すだけ。

ちなみに最後の$appendはオプションで、TRUEにすると追加、FALSEにすると更新(上書き)するというものだ。

例えば既に挿入されているタグがある場合、それらを残しておくかどうか。

デフォルトではFALSEになっているので誤って上書きしてしまわないように注意しよう。

返り値は、失敗したときにだけFALSEを返す。

何より便利なのが存在しないタグを追加しようとした時、自動的に生成してくれるという機能。

投稿タグはワードプレスSEOの根幹とも言うべき機能なので、覚えておいて損はないはず。

ちなみに余談ですが、タグはデータベースでは"term"というテーブルに追加されていきます。
2011-10-25 (火) | Edit |
*ソースコード*


/* $fpはソース、$searchにはそれぞれ抜き出す前後の文字列 */
function search($fp,$search1,$search2){
$fp_1 = strstr($fp,$search1);
if($fp_1 !== FALSE){
if(substr($fp_1,0,strpos($fp_1,$search2)) !== FALSE && substr($fp_1,0,strpos($fp_1,$search2)) !== ""){
return substr($fp_1,0,strpos($fp_1,$search2)).$search2;
}else{
return FALSE;
}
}else{
return FALSE;
}
}

?>



$search1とserch2の間に挟まれた値をとりだす。

文字列が見つからない場合はFALSEを返す。

例えばあるURLのページのソースをfile_get_contents()して、特定のタグに挟まれた値を取り出すとかすると面白い。

なおこの関数では取り出す文字列にserch1とsearch2が含まれるので注意。

もし余計なタグなどを取り除きたい場合はstrip_tagsという便利な関数がある。

ちなみにこの関数を応用した、「文字列の中ある文字列に挟まれた部分を全て抽出する」という関数もあるので紹介する。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。