0

我有一个这样的固定链接:

example.com/cyclone/2013/06/05/introduction/

这篇文章属于“旋风”和“天气”两个类别,但“旋风”正在这个永久链接中接管。

我需要检查是否为这篇文章分配了“天气”,然后重写永久链接。

if( in_array( 'weather', $cats ) ) {
        $pattern = '#([^/]+)/(\d{4})/(\d{2})/(\d{2})/([^/]+)/?#';
        if( preg_match( $pattern, $permalink, $matches ) ) {
            if( $matches[1] && $old_cat = get_category_by_slug( $matches[1] ) && 'weather' !== $matches[1] ) {
                preg_replace( '/' . $matches[1] . '/', $new_cat, $permalink );
                return $permalink;
            }
        }
    }

不幸的是,$matches[1] 不是用于 preg_replace 的有效“模式”。如何替换 preg_match 的第一场比赛?

4

1 回答 1

0

尝试使用 preg_replace_callback 函数:

$permalink = preg_replace_callback('~[^/]++(?=\d{4}/\d{2}/\d{2}/[^/]++)~',
    function ($m) use ($new_cat, $old_cat) {
        if ($old_cat == get_category_by_slug($m[0]) && 'weather' !== $m[0])
            return $new_cat;
    },
    $permalink);

请注意preg_replacepreg_replace_callback不会更改主题字符串,而是返回修改后的字符串。

于 2013-06-13T15:34:51.877 回答