Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阻止@在此类中打印数组_Php_Wordpress - Fatal编程技术网

Php 阻止@在此类中打印数组

Php 阻止@在此类中打印数组,php,wordpress,Php,Wordpress,这一次我赢了 我有一个wordpress类,它基本上会扫描文章和评论中的提及,并根据发现的内容输出内容 无论在post内容中哪里找到“@somename”,它都会去除@符号并搜索WP db以查看“somename”是否为有效用户 如果用户存在,它将返回链接到其用户帐户的原始“@somename” 如果用户不存在,它只返回没有链接的原始“@somename” 这是完美的工作,但我的问题是,如果它找到带有空格的“@somename”,它将返回“Array” 如果它在@symbol“@“、#@、@“、

这一次我赢了

我有一个wordpress类,它基本上会扫描文章和评论中的提及,并根据发现的内容输出内容

无论在post内容中哪里找到“@somename”,它都会去除@符号并搜索WP db以查看“somename”是否为有效用户

如果用户存在,它将返回链接到其用户帐户的原始“@somename”

如果用户不存在,它只返回没有链接的原始“@somename”

这是完美的工作,但我的问题是,如果它找到带有空格的“@somename”,它将返回“Array”

如果它在@symbol“@“、#@、@“、@$或你能想到的任何东西周围找到“somename@”或任何其他符号组合,也是一样的

我想我要问的是,只有当例程找到格式正确的“提及”-即-@somename(除了a-z和0-9之外,没有空格或任何其他字符)时,如何应用该例程

下面是课堂:

 Class d3ep_stream_mentions {

function __construct() {
    add_filter( 'the_content', array( __CLASS__, 'link_user_mentions' ) );
    add_filter( 'comment_text', array( __CLASS__, 'link_user_mentions' ) );
}

//Strip @ from string preparing for callback
public static function link_user_mentions( $content ) {
    if ( is_admin() ) {
        return $content;
    }
    return preg_replace_callback( '/@[0-9a-zA-Z]*/', array( __CLASS__, 'content_callback' ), $content );
}

//Callback function that filters potential authors
public static function content_callback( $mention ) {

    $split_a = str_replace( '@', '', $mention );
    if ( !isset( $split_a[0] ) || empty( $split_a[0] ) )

        return $mention;

    // Check if the user exists
    $user = get_user_by( 'login', esc_attr( $split_a[0] ) );
    if ( empty( $user ) || !isset( $user->user_login ) || empty( $user->user_login ) ){

        return '@'.esc_attr( $split_a[0] ).'';
    }

    // Return the link              
    return '<span class="stream-mention">@</span><a href="'.site_url().'/user/' .$user->user_login.'" class="stream-mention" rel="friend" target="_parent">' . esc_html($user->user_login) . '</a>';
    }
}
new d3ep_stream_mentions();
d3ep_流_提到的类{
函数_u构造(){
添加过滤器(‘内容’、数组(‘类’、‘链接’、‘用户’);
添加过滤器(“注释文本”,数组(“链接用户”);
}
//从准备回调的字符串中删除@
公共静态函数链接用户提及($content){
if(is_admin()){
返回$content;
}
返回preg_replace_回调('/@[0-9a-zA-Z]*/',数组('content_callback'),$content);
}
//过滤潜在作者的回调函数
公共静态函数content\u回调($title){
$split_a=str_replace('@','.$提及);
如果(!isset($split_a[0])|为空($split_a[0]))
返回$TENCE;
//检查用户是否存在
$user=get_user_by('login',esc_attr($split_a[0]);
if(empty($user)| |!isset($user->user|login)| empty($user->user|login)){
返回“@”.esc_attr($split_a[0])”;
}
//返回链接
返回“@”;
}
}
新的d3ep_流_提及();
我知道可以用不同的措辞来表达preg_replace_回调,但我不知道应该是什么。我猜strpos也需要在那里的某个地方使用


我尝试过几种方法,但都不奏效,所以我希望so的神能在这里救我;)

亚当的帖子给出的答案是改变正则表达式:

return preg_replace_callback( '/@[0-9a-zA-Z]+/', array( __CLASS__, 'content_callback' ), $content );

您是否尝试过更改regexp。你以为你想要的是
'/[0-9a-zA-Z]+/'
而不是
'/[0-9a-zA-Z]*/'
-
*
是零或多个-你想要的是+是
@
@后面的一个或多个字母,亚当先生,你是个传奇!非常感谢:)@Grant如果你得到了上面提到的答案,请把它贴在这里并接受你自己的答案。别把问题留着不谈。谢谢