不能使用$1在basename wordpress过滤器


Can't use $1 in basename wordpress filter

好吧,这很难在标题中解释。我在functions。php

中创建了这个函数

在这里我添加了一个标题标签的所有图像链接与图像标题。通过查找文件名并在数据库中查找,找到ID并获得正确的标题。

函数

add_filter('the_content', 'addshadowboxrel', 12);
add_filter('get_comment_text', 'addshadowboxrel');
function addshadowboxrel ($content) {
  global $wpdb;
    $pattern = "/<a(.*?)href=('|'")([^>]*).(bmp|gif|jpeg|jpg|png)('|'")(.*?)>(.*?)<'/a>/i";
    $path = '$3.$4';
    $attachment_url = basename($path);  
    $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) );
    $attachment = get_post( $attachment_id );
    $replacement = '<a$1href=$2$3.$4$5 title="'.$attachment->post_excerpt.'" rel="lightbox"$6>$7</a>';
    $content = preg_replace($pattern, $replacement, $content);
    return $content;
}

一切正常:如果我将$path替换为实际路径,而不是'$3.$4'.

但是basename函数不工作,因为它是在这里?

您在哪里申报了$3$4 ?变量名不能以数字开头。所以:

$3
$4

不能是有效的变量。你能不能改成:

$n3
$n4

?并尝试!这可能是基本的,但这将是原因!:)

也可以考虑使用preg_match_all函数。查看模式语法了解更多细节