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

时间:2017-01-20 15:20:36

标签: regex wordpress replace preg-replace str-replace

我不是专业人士,但我正在尝试使用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 / ...目录中的文件。

感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:0)

这应该有效。

<强> REGEX

<?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;
}