替换特定目录中的文件扩展名

问题描述 投票:0回答:1

我不是专业人士,但我正在尝试在 WordPress 中使用 webp 图像。

我有一个名为 Rj Webp Converter 的插件,可以将图像转换为 webp 格式,然后我使用此功能将 jpg、jpeg 和 png 等扩展名替换为 webp。

function callback($buffer) {
    if(!is_admin() && $GLOBALS['pagenow'] != 'wp-login.php') {
        $buffer = str_replace('.jpg','.webp',$buffer);
        $buffer = str_replace('.jpeg','.webp',$buffer);
        $buffer = str_replace('.png','.webp',$buffer); }
    return $buffer; }
function buffer_start() { ob_start("callback"); }
function buffer_end() { ob_end_flush(); }
add_action('after_setup_theme', 'buffer_start');
add_action('shutdown', 'buffer_end');

但是有一个问题。 上面的代码替换了每个图像文件。 我想替换仅位于 wp-content/uploads/... 目录中的文件。

如有任何帮助,我们将不胜感激。 :)

php regex wordpress replace preg-replace
1个回答
0
投票

这应该可行。

正则表达式

<?php
$re = '/(.*(?<=\.)(?:jpg|jpeg|png)(?=$))/m';
$str = 'test.jpg
testing.png
test.jpeg';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches);
?>

PHP 您应该使用 foreach 将 $filename 替换为 $matches

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return $info['filename'] . '.' . $new_extension;
}
© www.soinside.com 2019 - 2024. All rights reserved.