社内向けの掲示用にWordPressのFeedWordpressというプラグインを使って
他のRSSを定期的に取り込んでいます。
そこで、題名に取り込み元の識別するための文字列を付けたいとtitleを加工しています。
例:日経新聞のRSSだと題名の接頭辞に[日経]とつける。
これをするのに、feedwordpress_item.phpのget_title を加工して付けるようにしてみました。
これで手動でRSSを取り込む時は問題無く動作しましたが
cronを使って、http://www.hogehoge.com?update_feedwordpress=1を実行させると
取り込まれずRSSから取り込んだままの題名が表示されます。
cronから取り込んだ場合のget_titleはどこで行なっているのでしょうか。
(xmlをパースしたときにwordpressにpostされない値で判定をしたいので、post_insert(update)する前にtitleを加工したいのです。)
もう5日もにらめっこしてて少々つかれてしまいました。
正常ではちゃんと動くのにcronを通すと動かなくなるのですよね。
cronとphpのトラブルで一番多い原因の一つに、カレントディレクトリへの移動ができていないことが挙げられます。
http://www.es-works.com/setup_cron.html
上記のURLを参考にして、cronの実行時に、まずカレントディレクトリに移動してからphpを実行するように書き換えてみてください。
cron とおっしゃってるのは、いわゆる unix の crontab で登録・参照する cron のことでしょうか?
URL を実行というのがよく分かりません。
curl や wget コマンドを使っているのだと想定します。
ブラウザでURLを打ち込む場合と、curl コマンドを実行する場合の違いで思いつくのは最後の/を補完するかどうかです。
以下のように?の前に/を補ったURLで試してみてはいかがでしょうか。
http://www.hogehoge.com/?update_feedwordpress=1
もうひとつ思いつくのはエージェントの違いです。
どのように構築されているかが分からないので想像になりますがエージェントを判定してリダイレクトしたりするような設定になっていないでしょうか?
ありがとうございます。おそらくエージェントの違いです。
ここがどう違うか有識者に教えて頂ければと思っておりましたが、再度設計を再検討した結果違う方法で取得することで実現できました。ご確認頂きありがとうございます。
どうもエージェントの違いでwordpressのtitleにHTMLタグを無視するような動きをしているようです。(憶測ですが。。)
直接お力にはなれなかったようですが、問題が解決して良かったですね。
cronでPHPスクリプトを実行するのに、CGIモードで実行していませんか。
文字列を置換するための関数が、CGIモードでは禁止されているかもしれません。
確認してみて下さい。
たとえば、文字列を置換するだけのPHPスクリプトを作って、cronで実行してみてください。
また、feedwordpress_item.phpの改造箇所にデバッグポイントを仕掛けてみて下さい。
たとえば、get_titleで取得した直後のタイトルをテキストファイルに書き出し、置換後のタイトルを別のテキストファイルに書き出すようにしてみて下さい。手動でURLを呼び出すときと、cronで実行しているときのテキストファイルの結果が違うようだったら、CGIモードで正常に動かない関数を利用している可能性大です。
ありがとうございます。
2013/08/17 08:04:55ただ、cronの実行はURLであること。また、実行できているがtitleの取得がおかしいので
ご回答いただいたcron側の問題というよりは、wordpressの仕組み側の問題と思っています。