在所有帖子上运行`wp_INSERT_POST_Data`

时间:2020-12-03 作者:Joe Seifi

我有一堆正则表达式,我想在我的帖子上运行这些正则表达式来更新post_content 字段中,当满足一系列条件时,其中一些条件需要来自ACF的各种值的组合。长话短说,我需要一种能够使用preg_replace

我一直在学习wp_insert_post_data 过滤,它可以工作,但它只适用于当前正在编辑的帖子。有没有办法在WordPress中做到这一点,我可以循环浏览所有帖子并以类似方式更新内容?

这是我目前拥有的。

add_filter(\'wp_insert_post_data\', \'mystuff\', 99, 2);
function mystuff($data, $post)
{
    $content = $data[\'post_content\'];
    $regex = \'/MYCRAZYREGEXSTUFF/\';
    $match = preg_match($regex, $content, $matches);
    if ($match) {
        $updatedContent = preg_replace($regex, \'\', $content);
        $data[\'post_content\'] = $updatedContent;
    }
    return $data;
}

1 个回复
SO网友:Joe Seifi

我最终只是在模板的索引中编写了一个函数。像这样。

function fancySearchAndReplace() {
    $regex = \'/myregex/\';
    $my_posts = get_posts(array(\'post_type\' => \'post\', \'numberposts\' => -1));
    foreach ($my_posts as $post) {
        $content = $post->post_content;
        $theID = $post->ID;
        $thing = get_field(\'thing\', $theID);
        $updatedContent = preg_replace($regex, $thing, $content);
        wp_update_post(array(
            \'ID\' => $theID,
            \'post_content\' => $updatedContent,
        ));
    }
}