サポート » 使い方全般 » 投稿記事の自動置換処理をカスタマイズしたい

  • 解決済 4017B

    (@4017b)


    WordPressのDefaultの機能で、自動的に投稿記事本文やコメント文を自動置換する機能がありますが。何かと想定外の置換処理を行う事もままあり、それらの処理をUser側でコントロール(カスタマイズ)したいと思っています。

    調べた結果、 wp-includes/formatting.php 内にある wptexturize関数が関係している事が分りました。しかし他にも、wp-includes/kses.php 内に、$allowedtags = array(~); と言う形でそれらしい記述がありました。これらを必要に応じてコメントアウトすれば良いのかとも思いましたが…出来ればWordPress本体の方は弄りたくありません。

    とりあえず、

    remove_filter('the_title', 'wptexturize');
    remove_filter('the_content', 'wptexturize');
    remove_filter('the_excerpt', 'wptexturize');

    ~とテーマ内の function.php に追記する形で自動置換処理を回避させる事が出来る事は分りました。

    しかし自分としては自動置換処理を全て回避ではなく、自分好みの自動置換処理を適用させたいと思っています。そこで function.php に、
    add_filter('wptexturize', 'wp_filter_post_kses', 10, 1);
    ~と追記する形でタグ整形のみを行って貰おうと考えましたが…自分が想定していた物とは若干違った結果になっています。

    自分が希望する自動処理は、

    • 自動リンク処理を停止。
    • 元々、投稿記事内で許可されてるタグは許可(<strong><table>~など)。
    • 本文内の「”」などを「‘’」に自動変換するのを停止。
    • 許可タグ以外の「<>」や「”」などは実体参照文字へ置換処理。

    ~以上、4つの事を投稿記事の本文(及びタイトル、抜粋)に対して処理させたいです。

    前述の add_filter('wptexturize', 'wp_filter_post_kses', 10, 1); 追記だと。「”」や「’」のみ実体参照文字へ置換処理されてるみたいですが、「<>」に対しては無反応です。また「–(ハイフン2個)」や「”(シングルクォーテーション2個)」を勝手に意訳?変換してしまいます(「–」や「”」など)。自分としてはちゃんと正しく「&#045;&#045;」とか「&#8217;&#8217;」とかに置換処理して欲しいのです。

    また、コメント文に対しても同様の処理を行いたいと思っています。ただしコメント文に関しては、問答無用で全てのコードやHTMLタグを無効化(実体参照文字へ置換処理)したいです。リンク等も含めて、全てのタグを置換処理したいです。

    コード例や使えそうなプラグインなど、何かアドバイスありましたらお願いします。

    >使用環境:
    ・PHP 5.1.6 (Linux)
    ・WordPress 3.0.0
    ・テーマ :wp.Vicuna 2.0.3

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • wptexturizeに変わるものを自前で作ればいいかと思います

    remove_filter ('the_content',  'wptexturize');
    add_filter('the_content','mytexturize');
    
    	function mytexturize($text){
    
    	$b = "test";
    	$a = "練習";
    
    		$documents = str_replace($b,$a,$text);
    
    		return $documents;
    
         }

    サンプルコードを例にして自前の関数を作って適用してみましたが、結果は芳しくありません。<!--more--><!--nextpage--> などのWordPress専用のショートコードが可笑しくなってしまいました(何故かNextGenGalleryのショートコードは影響を受けない)。きちんと自分が思い描く置換処理を適用させようと思ったら、かなり大がかりな関数を作らないと行けない様な気がして来ました。

    もう少しWordPress関数とPHPの勉強をしないと難しいみたいです。解決ではありませんが、一旦、この件に関して凍結したいと思います。

    P.S.
    で…今初めて思ったんですが。WordPressってDBに書き込まれる本文データとかとは、特に置換処理とかせずに平のテキストのままで書き込まれてるんですか?

    the_content() と言うのはDBから記事本文を呼び出す関数ですよね?自分としてはそうじゃなくて、DBに書き込まれる前に置換処理を施したいんですが、そういう考え方自体が間違ってるんでしょうか?読み込みよりも、書き込みの方が圧倒的に回数的には少ないので、書き込み時により複雑な処理を施し、回数の多い読み込み時には出来るだけ最小限度の処理で済ませる~と言うのは異端なのでしょうか?

    それにコメント欄に上手い具合に置換処理を適用させる方法も分りません。

    コメント欄の表示には get_comment_text()comment_text() ~辺りが関わっているんじゃないかと推測して弄ってみましたが…。基本的には無反応、時たま変な¥が表示される??

    また吐き出されたHTMLソースを見たら、記事本文中に含まれるHTMLタグと思しき箇所が全部抜き出されて、属性値を持ってる場合は「”」が一旦、「¥”」へ置換されてるみたいです??

    どこかにWordPressの書き込まれたデータが、どういう経路(関数)を辿ってDBに書き込まれ、また呼び出されてくるのか解説したwebサイトなど無いものでしょうか?

    で…今初めて思ったんですが。WordPressってDBに書き込まれる本文データとかとは、特に置換処理とかせずに平のテキストのままで書き込まれてるんですか?

    MYSQLデータベースに、postsというテーブルがあるので、phpMyAdmin等で見てみるといいと思います。

    the_content() と言うのはDBから記事本文を呼び出す関数ですよね?自分としてはそうじゃなくて、DBに書き込まれる前に置換処理を施したいんですが、そういう考え方自体が間違ってるんでしょうか?読み込みよりも、書き込みの方が圧倒的に回数的には少ないので、書き込み時により複雑な処理を施し、回数の多い読み込み時には出来るだけ最小限度の処理で済ませる~と言うのは異端なのでしょうか?

    そんなことはないんじゃないかなと、私は思います。

    例えば他のタイプのブログ、frog CMS等では、content と、content_htmlというフィールドを持っていて、contentには、置換前 content_htmlには置換後のコンテンツが入るようになっているものもあるようです

    ワードプレスも、キャッシュ機能などもあるので、毎回重い処理をしているということでもないと思います

    それにコメント欄に上手い具合に置換処理を適用させる方法も分りません。

    何をどのように、やりたいかを具体的に聞けば、答えてくれる人がいるかもしれないです。

    >データベース
    実際にDBを確認した訳ではありませんが。バックアップでXMLを書き出したら、中身の文書がテキストエリアに入力したまま(多段改行含む)の状態で保存されてましたので、そう思いました。まあ確かに仰る通り、キャッシュがあるので必ずしも毎回負担が掛かってる訳では無いと思いますが…何となく気持ちが悪かったので(笑)。

    どっちが良いのかは、最終的には各人の好みなんでしょうね。とりあえずWordPressがDefaultでそうなっているのなら、自分としてはそれに従うつもりです。

    >コメント欄に置換処理
    自分もまだWordPressを触り始めて2ヶ月少々ですので、まだまだ基本的な事でも分ってない部分が多いと感じました。最初からピーキーなカスタマイズにあれこれ手を出すべきじゃないかなと最近は少し自省してます。

    今後、もう暫くはWordPressの基本性能をもっと使い倒してから、より高度なカスタマイズに挑戦していこうと思います。コメント欄の置換処理に関しては、もう少し自分でTry&Errorを繰り返してから、もっと問題点を自分の中で明確化出来たら改めて質問し直しますね。

    nobitaさんには色々とご助言、ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「投稿記事の自動置換処理をカスタマイズしたい」には新たに返信することはできません。