您的foreach
-循环错误,您通过放置;
在它背后。这就是为什么你只更新一篇帖子的原因。就这样做吧:
foreach ( $posts as $post ) { //remove the »;«
setup_postdata( $post ); //move this inside the loop
$newcontent = preg_replace(\'#(<[/]?img.*>)#U\', \'\', $post->post_content);
$newpost = array(
\'ID\' => $post->ID,
\'post_content\' => $newcontent
);
wp_update_post($newpost);
}
wp_reset_postdata(); //do not forget to reset postdata after the loop
我也更改了正则表达式,可能不是绝对必要的,但这一个对我来说很好。
另外添加:
global $post;
在您的功能开始时。您不必这样做,请参阅@murdaugh comment,但如果您设置并重置postdata correct,则不会有任何危害。事实上,有些情况下你必须这样做,但这与这里无关。我只是出于故障保护的原因才建议这样做的。
<小时>Disclaimer:<第二部分不是问题答案的一部分。这只是对提出的问题的进一步考虑<人力资源>Other notes:
我猜你想让你的过渡者反映哪些帖子已经被清理了。如果你有20万个帖子,这绝对有道理。在这种情况下,您应该确保您的临时名称反映了您已经清理的帖子集。像函数中这样的泛型函数无法解决此问题。瞬态名称应反映$args
. 精简的代码段:
//make your parameters variables
$ay = \'2013\'; //year
$am = \'1\'; //month
$ad = \'28\'; //day
$ac = \'30\'; //category
$aa = \'3\'; //author
//get your transient based on the set of variables
if (get_transient(\'rm_img_\'.$ay.\'_\'.$am.\'_\'.$ad.\'_\'.$ac.\'_\'.$aa.\'\') )
return;
//use the variables in your args
$args = array(
\'post_type\' => \'post\',
\'year\' => $ay,
\'monthnum\' => $am,
\'day\' => $ad,
\'post_status\' =>\'publish\',
\'category\' => $ac,
\'post_author\' => $aa,
\'nopaging\' => 1
);
//get your transient based on the set of variables
set_transient(\'rm_img_\'.$ay.\'_\'.$am.\'_\'.$ad.\'_\'.$ac.\'_\'.$aa.\'\', true, 0);
这不是现在的样子我只是想说清楚。
这只是一个如何利用瞬间的想法,对你或其他感兴趣的人来说当然还有其他一些步骤,例如:您可能真正想要的是函数将这些参数作为参数除此之外,可能还需要更多的自动循环迭代的可能性好的,我要在它失控之前把它打破。