删除内容中的第一个图像

时间:2015-09-07 作者:Bryan Kremkau

我一直在使用以下代码:

function remove_first_image ($content) {
if (!is_page() && !is_feed() && !is_feed()) {
$content = preg_replace("/<img[^>]+\\>/i", "", $content, 1);
} return $content;
}
add_filter(\'the_content\', \'remove_first_image\');
几年来,我的网站上有近20000篇帖子,上面插入了图片。我有一个插件,它也使用第一张图片作为特色图片。有时我仍然需要在内容中插入第一幅图像,这样它就不会删除我在其中发布的另一幅图像。

我想有在内容中的第一个图像完全删除在帖子。这样以后,我就不必每次都在内容中插入一个特色图像,只要我有多个图像时,其他图像就会显示出来。到目前为止,我还没有找到任何关于这方面的信息,除了不得不进入20000篇帖子并删除第一张图片。

有什么想法吗?

3 个回复
SO网友:totels

我不知道有什么插件专门针对这一点,WP中没有任何插件可以做到这一点,但用一点php实现并不太困难,即使是20k帖子也不应该太极端。根据您的服务器设置,您可能需要采取一些变通方法来确保连接保持活动状态,但基本思想是循环浏览所有帖子,检查它是否是正确的帖子(不是页面、修订、自定义post\\u类型等),然后对内容运行字符串替换,非常类似于您已有的代码。

这是未经测试的,例如:

$query = new WP_Query( array(
  \'post_type\' => \'post\',
  \'post_status\' => \'publish\'
) );

foreach ( $query->posts as $edit_post ) {
  $edit_post->post_content
  wp_update_post( array(
    \'ID\' => $edit_post->ID,
    \'post_content\' => preg_replace( "/<img[^>]+\\>/i", "", $edit_post->post_content, 1 )
  );
}
你可能想把它放在自己的插件中,用一些管理页面代码在安全的地方运行,希望你能明白。

WP-CLI 能够使用进行批量编辑search-replace 数据库字符串,可能用于执行类似的操作。

$ wp search-replace \'/<img[^>]+\\>/i\' \'\' wp_posts --regex 

SO网友:Vinnie James

你可以在前端用这样的东西

$(\'img \')[0].remove()

SO网友:Elex

如果您只想隐藏它,可以在CSS中进行。

.your-post-content-class img:first-of-type { display:none; }
如果您真的想从中删除Ifpost_content, 您可以在post_content 然后更新它。

function removeFirstImgTag($post_id) {
  $post = get_post($post_id);
  $content = $post->post_content;
  preg_match(\'<img([\\w\\W]+?)/>\', $content, $matches);
  $content = str_replace($matches[0][0], \'\', $content);

  wp_update_post(array(
    \'ID\'            => $post_id,
    \'post_content\'  => $content,
  ));
}
您在没有apply_filters(\'the_content\'), 然后用regex获得第一个img标记,然后更新它。

我还没有对此进行测试,但我认为,这是可行的:)