Wordpress 3.5.1的debug流水账
一个合作网站是基于Wordpress做的, 不能正常使用FeedWordPress这个插件, 对方没有开发者, 只有一个类似于美工和编辑的人, 因为我在本地使用同样的版本(Wordpress 3.5.1, FeedWordPress 2013.0504)运行正常, 所以决定帮他们看看. 花了老大劲把源码和数据库弄到了本地, 今天一整天基本上都在debug了. 最终发现的问题是, FeedWordPress 里面有一个选项Optimize IN clauses, 这个开启后, 会在底层的query上增加一个filter, 就是这个filter导致的问题. 这个query,
SELECT tr.term_taxonomy_id FROM wp_term_relationships AS tr INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN (13319) AND tt.taxonomy IN ('post_tag')
在经过filter后, 最后的taxonomy 条件不见了, 导致每一次在执行至wp_set_post_tags()时, 将wp_set_post_categories()里面设好的category关联全删了. 相关收获: * 在wordpress中, 可以通过一个global的 $wp_filter 查看某个filter上关联了哪些函数 * 使用php扩展xdebug, 查看php代码被哪个方法和文件调用. 显示语句为
echo "Called @ ". xdebug_call_file().":". xdebug_call_line(). " from ". xdebug_call_function();