[{"data":1,"prerenderedAt":687},["ShallowReactive",2],{"blog:2008:wordpress-25-notes-from-the-field":3,"blogMore-Technology":673,"comments-wordpress-25-notes-from-the-field":686},{"id":4,"title":5,"body":6,"category":653,"commentCount":654,"date":655,"description":12,"excerpt":656,"extension":657,"filenames":658,"hidden":659,"image":660,"meta":662,"minutes":492,"navigation":663,"path":664,"seo":665,"showCategory":658,"stem":666,"tags":667,"updated":658,"url":670,"wordCount":671,"__hash__":672},"content\u002Fblog\u002F2008\u002Fwordpress-25-notes-from-the-field.md","WordPress 2.5 notes from the field",{"type":7,"value":8,"toc":638},"minimark",[9,13,18,23,39,42,45,49,58,61,65,68,76,89,92,96,100,114,118,132,135,139,142,146,160,299,303,306,321,328,626,629,634],[10,11,12],"p",{},"It’s been a few weeks since I upgraded to WordPress 2.5 and while the upgrade went well it hasn’t been all plain sailing.",[14,15,17],"h2",{"id":16},"new-and-changed","New and changed",[19,20,22],"h3",{"id":21},"manage-files-removed","Manage files removed",[10,24,25,26,30,31,38],{},"The ",[27,28,29],"em",{},"Manage > Files"," administration function has been silently removed despite still appearing in the ",[32,33,37],"a",{"href":34,"rel":35},"https:\u002F\u002Fcodex.wordpress.org\u002FDesign_Theme_Editor_SubPanel",[36],"nofollow","on-line documentation",".",[10,40,41],{},"If you don’t have FTP access this was the only way to modify your .htaccess and other important files without installing additional software. I can understand such a powerful function could be abused but an option to turn it back on or even a warning about its removal in the upgrade notes\u002Fread-me would have been useful.",[10,43,44],{},"Hopefully somebody will repackage the old functionality into a plug-in.",[19,46,48],{"id":47},"new-look-administration","New look administration",[10,50,51,52,57],{},"I’m not sold on the new administration theme look but Dean J Robinson has crafted ",[32,53,56],{"href":54,"rel":55},"https:\u002F\u002Fdeanjrobinson.com\u002Fprojects\u002Ffluency-admin\u002F",[36],"a plug-in called Fluency"," that refines the styling.",[10,59,60],{},"Generally usability in the administration user interface is better, the write post screen makes a lot more sense and the category & tag management is more logical.",[19,62,64],{"id":63},"auto-update-plug-ins","Auto update plug-ins",[10,66,67],{},"I love this new feature, it shows you when a new version of a plug-in is available and then lets you automatically update. It isn’t without issue however, specifically it:",[69,70],"img",{"className":71,"src":74,"alt":75},[72,73],"screenshot","right","https:\u002F\u002Fimg.damieng.com\u002Fblog\u002FWordPress25AutoUpdate.png","Screen-shot of WordPress 2.5's automatic plug-in upgrade feature",[77,78,79,83,86],"ol",{},[80,81,82],"li",{},"overwrites modified local versions without warning",[80,84,85],{},"may go wrong (it “upgraded” my wp-PostViews to wp-DBManager)",[80,87,88],{},"does not provide a roll-back or revert facility",[10,90,91],{},"Still it’s a v1 feature and I’m sure it’ll get some refinement in 2.6.",[14,93,95],{"id":94},"compatibility","Compatibility",[19,97,99],{"id":98},"live-search-broken-redoable-theme","Live search broken (Redoable theme)",[10,101,102,103,108,109,38],{},"The Ajax-enabled live search is broken in ",[32,104,107],{"href":105,"rel":106},"https:\u002F\u002Fdeanjrobinson.com\u002Fprojects\u002Fredoable\u002F",[36],"Redoable"," although the normal search works. There have been no signs of an update in a long time despite an un-patched ",[32,110,113],{"href":111,"rel":112},"https:\u002F\u002Fsecunia.com\u002Fadvisories\u002F25310\u002F",[36],"HTML injection vulnerability",[19,115,117],{"id":116},"gregarious","Gregarious",[10,119,120,121,126,127,38],{},"This social bookmarking plug-in is broken in 2.5 and the author is ",[32,122,125],{"href":123,"rel":124},"https:\u002F\u002Flipidity.com\u002Fweb\u002Fwordpress\u002Fwp-plugin-gregarious\u002F",[36],"too busy to fix it right now"," and the search for an alternative led me to Joost and his ",[32,128,131],{"href":129,"rel":130},"https:\u002F\u002Fwww.joostdevalk.nl\u002Fwordpress\u002Fsociable\u002F",[36],"Sociable plug-in",[10,133,134],{},"I’m not 100% happy with the output from Sociable right now but that can wait until my new theme is finished.",[14,136,138],{"id":137},"other-tweaks","Other tweaks",[10,140,141],{},"These weren’t caused by the 2.5 upgrade but once you start messing with one thing there’s always that urge to fix other things you know aren’t right.",[19,143,145],{"id":144},"google-analytics","Google Analytics",[10,147,148,149,154,155,159],{},"While testing my site I found XHTML compliance was broken. It turns out that Joost’s ",[32,150,153],{"href":151,"rel":152},"https:\u002F\u002Fwww.joostdevalk.nl\u002Fwordpress\u002Fgoogle-analytics\u002F",[36],"Google Analytics for WordPress"," incorrectly rewrites the hyperlinks when they parent another element such as an image. Putting on my PHP hacking hat I managed to fix it by editing the plug-in and changing the last line of ",[156,157,158],"code",{},"ga_parse_link"," to:",[161,162,167],"pre",{"className":163,"code":164,"language":165,"meta":166,"style":166},"language-php shiki shiki-themes everforest-light dracula","return '\u003Ca '.$matches[1].'href=\"'.$matches[2].'\u002F\u002F' .$matches[3].'\"'.' '.$coolBit.$matches[4].'>'.$matches[5].'\u003C\u002Fa>';\n","php","",[156,168,169],{"__ignoreMap":166},[170,171,174,178,182,186,189,192,196,200,203,205,207,210,212,214,216,219,221,223,225,228,230,233,235,238,240,242,244,247,249,251,253,255,257,260,262,264,267,269,271,273,276,278,280,282,285,287,289,291,294,296],"span",{"class":172,"line":173},"line",1,[170,175,177],{"class":176},"smiwp","return",[170,179,181],{"class":180},"spsLl"," '",[170,183,185],{"class":184},"sJFhe","\u003Ca ",[170,187,188],{"class":180},"'",[170,190,38],{"class":191},"s9HRq",[170,193,195],{"class":194},"s6Vpi","$matches[",[170,197,199],{"class":198},"s3Ipq","1",[170,201,202],{"class":194},"]",[170,204,38],{"class":191},[170,206,188],{"class":180},[170,208,209],{"class":184},"href=\"",[170,211,188],{"class":180},[170,213,38],{"class":191},[170,215,195],{"class":194},[170,217,218],{"class":198},"2",[170,220,202],{"class":194},[170,222,38],{"class":191},[170,224,188],{"class":180},[170,226,227],{"class":184},"\u002F\u002F",[170,229,188],{"class":180},[170,231,232],{"class":191}," .",[170,234,195],{"class":194},[170,236,237],{"class":198},"3",[170,239,202],{"class":194},[170,241,38],{"class":191},[170,243,188],{"class":180},[170,245,246],{"class":184},"\"",[170,248,188],{"class":180},[170,250,38],{"class":191},[170,252,188],{"class":180},[170,254,181],{"class":180},[170,256,38],{"class":191},[170,258,259],{"class":194},"$coolBit",[170,261,38],{"class":191},[170,263,195],{"class":194},[170,265,266],{"class":198},"4",[170,268,202],{"class":194},[170,270,38],{"class":191},[170,272,188],{"class":180},[170,274,275],{"class":184},">",[170,277,188],{"class":180},[170,279,38],{"class":191},[170,281,195],{"class":194},[170,283,284],{"class":198},"5",[170,286,202],{"class":194},[170,288,38],{"class":191},[170,290,188],{"class":180},[170,292,293],{"class":184},"\u003C\u002Fa>",[170,295,188],{"class":180},[170,297,298],{"class":194},";\n",[19,300,302],{"id":301},"subscriber-counts","Subscriber counts",[10,304,305],{},"My feed subscriber counts have been bugging me for a while as they jump up and down seemingly at random. In fact, it can be traced down to two things:",[77,307,308,315],{},[80,309,310,311,314],{},"If you base it on less than 5 days of activity you’ll get the weekend dip",[312,313],"br",{},"\nSolution: Count 7 days worth of individual subscribers",[80,316,317,318,320],{},"Google Reader etc. sometimes stop passing the subscriber count from time to time",[312,319],{},"\nSolution: Use single most recent multi-subscriber header for each service\u002Ffeed in the last 30 days",[10,322,323,324,327],{},"If you want to do the same you need to edit the Feed Statistics plug-in and change the ",[156,325,326],{},"how_many_subscribers"," function to:",[161,329,331],{"className":163,"code":330,"language":165,"meta":166,"style":166},"$q = \"SELECT subscribers, CASE WHEN subscribers = 1 THEN identifier ELSE CONCAT(identifier, feed) END AS ident FROM \".$table_prefix.\"feed_subscribers  WHERE ((subscribers = 1 AND\n    date > '\".date(\"Y-m-d H:i:s\", time() - (60 * 60 * 24 * get_option(\"feed_statistics_expiration_days\"))).\"' ) OR\n    (subscribers = 1 AND LOCATE('###',identifier) != 0 AND\n    date > '\".date(\"Y-m-d H:i:s\", time() - (60 * 60 * 24 * get_option(\"feed_statistics_expiration_days\") * 3)).\"' ) OR\n    (subscribers > 1 AND date > '\".date(\"Y-m-d H:i:s\", time() - (60 * 60 * 24 * 30 * 3)).\"' ) )\n    ORDER BY ident ASC, date DESC\";\n",[156,332,333,407,484,490,558,616],{"__ignoreMap":166},[170,334,335,338,341,344,347,351,354,357,360,362,365,368,371,374,378,381,384,387,390,393,395,397,400,402,404],{"class":172,"line":173},[170,336,337],{"class":194},"$q ",[170,339,340],{"class":191},"=",[170,342,343],{"class":180}," \"",[170,345,346],{"class":176},"SELECT",[170,348,350],{"class":349},"sJQOs"," subscribers, ",[170,352,353],{"class":176},"CASE",[170,355,356],{"class":176}," WHEN",[170,358,359],{"class":349}," subscribers ",[170,361,340],{"class":191},[170,363,364],{"class":198}," 1",[170,366,367],{"class":176}," THEN",[170,369,370],{"class":349}," identifier ",[170,372,373],{"class":176},"ELSE",[170,375,377],{"class":376},"sf-jo"," CONCAT",[170,379,380],{"class":349},"(identifier, feed) ",[170,382,383],{"class":176},"END",[170,385,386],{"class":176}," AS",[170,388,389],{"class":349}," ident ",[170,391,392],{"class":176},"FROM",[170,394,343],{"class":180},[170,396,38],{"class":191},[170,398,399],{"class":194},"$table_prefix",[170,401,38],{"class":191},[170,403,246],{"class":180},[170,405,406],{"class":184},"feed_subscribers  WHERE ((subscribers = 1 AND\n",[170,408,410,413,415,417,420,423,425,428,430,433,436,439,442,445,448,451,454,456,459,461,465,467,469,472,474,477,479,481],{"class":172,"line":409},2,[170,411,412],{"class":184},"    date > '",[170,414,246],{"class":180},[170,416,38],{"class":191},[170,418,419],{"class":376},"date",[170,421,422],{"class":194},"(",[170,424,246],{"class":180},[170,426,427],{"class":184},"Y-m-d H:i:s",[170,429,246],{"class":180},[170,431,432],{"class":194},",",[170,434,435],{"class":376}," time",[170,437,438],{"class":194},"()",[170,440,441],{"class":191}," -",[170,443,444],{"class":194}," (",[170,446,447],{"class":198},"60",[170,449,450],{"class":191}," *",[170,452,453],{"class":198}," 60",[170,455,450],{"class":191},[170,457,458],{"class":198}," 24",[170,460,450],{"class":191},[170,462,464],{"class":463},"sS4Kt"," get_option",[170,466,422],{"class":194},[170,468,246],{"class":180},[170,470,471],{"class":184},"feed_statistics_expiration_days",[170,473,246],{"class":180},[170,475,476],{"class":194},")))",[170,478,38],{"class":191},[170,480,246],{"class":180},[170,482,483],{"class":184},"' ) OR\n",[170,485,487],{"class":172,"line":486},3,[170,488,489],{"class":184},"    (subscribers = 1 AND LOCATE('###',identifier) != 0 AND\n",[170,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,544,546,549,552,554,556],{"class":172,"line":492},4,[170,494,412],{"class":184},[170,496,246],{"class":180},[170,498,38],{"class":191},[170,500,419],{"class":376},[170,502,422],{"class":194},[170,504,246],{"class":180},[170,506,427],{"class":184},[170,508,246],{"class":180},[170,510,432],{"class":194},[170,512,435],{"class":376},[170,514,438],{"class":194},[170,516,441],{"class":191},[170,518,444],{"class":194},[170,520,447],{"class":198},[170,522,450],{"class":191},[170,524,453],{"class":198},[170,526,450],{"class":191},[170,528,458],{"class":198},[170,530,450],{"class":191},[170,532,464],{"class":463},[170,534,422],{"class":194},[170,536,246],{"class":180},[170,538,471],{"class":184},[170,540,246],{"class":180},[170,542,543],{"class":194},")",[170,545,450],{"class":191},[170,547,548],{"class":198}," 3",[170,550,551],{"class":194},"))",[170,553,38],{"class":191},[170,555,246],{"class":180},[170,557,483],{"class":184},[170,559,561,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,603,605,607,609,611,613],{"class":172,"line":560},5,[170,562,563],{"class":184},"    (subscribers > 1 AND date > '",[170,565,246],{"class":180},[170,567,38],{"class":191},[170,569,419],{"class":376},[170,571,422],{"class":194},[170,573,246],{"class":180},[170,575,427],{"class":184},[170,577,246],{"class":180},[170,579,432],{"class":194},[170,581,435],{"class":376},[170,583,438],{"class":194},[170,585,441],{"class":191},[170,587,444],{"class":194},[170,589,447],{"class":198},[170,591,450],{"class":191},[170,593,453],{"class":198},[170,595,450],{"class":191},[170,597,458],{"class":198},[170,599,450],{"class":191},[170,601,602],{"class":198}," 30",[170,604,450],{"class":191},[170,606,548],{"class":198},[170,608,551],{"class":194},[170,610,38],{"class":191},[170,612,246],{"class":180},[170,614,615],{"class":184},"' ) )\n",[170,617,619,622,624],{"class":172,"line":618},6,[170,620,621],{"class":184},"    ORDER BY ident ASC, date DESC",[170,623,246],{"class":180},[170,625,298],{"class":194},[10,627,628],{},"This should help but it’s not ideal with individual readers counted more than once if they change IP and groups counted as one if they are sharing an IP\u002FNAT.",[10,630,631],{},[27,632,633],{},"[)amien",[635,636,637],"style",{},"html pre.shiki code .smiwp, html code.shiki .smiwp{--shiki-default:#F85552;--shiki-dark:#FF79C6}html pre.shiki code .spsLl, html code.shiki .spsLl{--shiki-default:#DFA000;--shiki-dark:#E9F284}html pre.shiki code .sJFhe, html code.shiki .sJFhe{--shiki-default:#DFA000;--shiki-dark:#F1FA8C}html pre.shiki code .s9HRq, html code.shiki .s9HRq{--shiki-default:#F57D26;--shiki-dark:#FF79C6}html pre.shiki code .s6Vpi, html code.shiki .s6Vpi{--shiki-default:#5C6A72;--shiki-dark:#F8F8F2}html pre.shiki code .s3Ipq, html code.shiki .s3Ipq{--shiki-default:#DF69BA;--shiki-dark:#BD93F9}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJQOs, html code.shiki .sJQOs{--shiki-default:#8DA101;--shiki-dark:#F1FA8C}html pre.shiki code .sf-jo, html code.shiki .sf-jo{--shiki-default:#8DA101;--shiki-dark:#8BE9FD}html pre.shiki code .sS4Kt, html code.shiki .sS4Kt{--shiki-default:#8DA101;--shiki-dark:#50FA7B}",{"title":166,"searchDepth":409,"depth":409,"links":639},[640,645,649],{"id":16,"depth":409,"text":17,"children":641},[642,643,644],{"id":21,"depth":486,"text":22},{"id":47,"depth":486,"text":48},{"id":63,"depth":486,"text":64},{"id":94,"depth":409,"text":95,"children":646},[647,648],{"id":98,"depth":486,"text":99},{"id":116,"depth":486,"text":117},{"id":137,"depth":409,"text":138,"children":650},[651,652],{"id":144,"depth":486,"text":145},{"id":301,"depth":486,"text":302},"Technology",10,"2008-04-18T13:59:04+00:00","[object Object]","md",null,false,{"className":661,"src":74,"alt":75},[72,73],{},true,"\u002Fblog\u002F2008\u002Fwordpress-25-notes-from-the-field",{"title":5,"description":12},"blog\u002F2008\u002Fwordpress-25-notes-from-the-field",[668,669],"analytics","WordPress","\u002Fblog\u002F2008\u002Fwordpress-25-notes-from-the-field\u002F",841,"AubIBmUSK2Tigy6mWXItS49MbXmuBdSpH5MSFfTvN7E",[674,678,682],{"title":675,"date":676,"url":677},"VTX5000: Part 4 - Communications","2026-05-06T10:19:24.727Z","\u002Fblog\u002F2026\u002Fvtx5000-part-4-comms-routines\u002F",{"title":679,"date":680,"url":681},"VTX5000: Part 3 - Software ROM","2026-04-15T23:00:00.000Z","\u002Fblog\u002F2026\u002Fvtx5000-part-3-software-rom\u002F",{"title":683,"date":684,"url":685},"VTX5000: Part 2 - Hardware","2026-03-30T23:00:00.000Z","\u002Fblog\u002F2026\u002Fprism-vtx5000-part-2\u002F",[],1780900517221]