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

时间:2014-06-26 11:25:57

标签: php wordpress

好的,这很难在标题中解释。但我在我的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;
}

一切正常:如果我用'$ 3. $ 4'的实际路径替换$ path。

但是basename函数不能正常工作吗?

1 个答案:

答案 0 :(得分:0)

您在哪里宣布$3$4?变量名称不能以数字开头。所以:

$3
$4

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

$n3
$n4

相反?试试吧!这可能是基本的,但这就是原因! :)

还要考虑使用函数preg_match_all。查看Pattern Syntax了解详情。