繁体   English   中英

防止@在此课程中打印ARRAY

[英]Preventing @ from printing ARRAY in this class

这个让我击败......

我有这个wordpress类,基本上扫描帖子和评论提及并根据它找到的内容输出内容。

无论它在帖子内容中找到“@somename”,它都会删除@符号并搜索WP数据库以查看“somename”是否为有效用户。

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

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

这是完美的工作,但我遇到的问题是,如果它找到带有空格的'@ somename',它会返回'Array'。

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

我想我要问的是如果只发现正确格式化的“提及” - 即@somename(没有空格或除了az和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();

我知道可以通过对preg_replace_callback进行不同的措辞来实现,但我只是不知道应该是什么。 我猜猜strpos也需要在某处使用。

我尝试了几件事,其中没有一件工作,所以我希望SO的众神可以救我在这里;)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM