Making WordPress.org

Changeset 5045


Ignore:
Timestamp:
03/02/2017 02:04:40 PM (7 years ago)
Author:
SergeyBiryukov
Message:

Support Forums: Add mention class to bbPress' built-in clickable user mentions for styling purposes.

See #2542.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php

    r4987 r5045  
    2424        // Disable inline terms and mentions.
    2525        add_action( 'plugins_loaded', array( $this, 'disable_inline_terms' ) );
     26
     27        // Replace bbp_make_mentions_clickable() to add `class="mention"`.
     28        remove_filter( 'bbp_make_clickable', 'bbp_make_mentions_clickable', 8 );
     29        add_filter( 'bbp_make_clickable', array( $this, 'make_mentions_clickable' ), 8 );
    2630
    2731        // Add notice to reply forms for privileged users in closed forums.
     
    136140        remove_action( 'init', array( 'Jetpack_Inline_Terms', 'init' ) );
    137141        remove_action( 'init', array( 'Jetpack_Mentions', 'init' ) );
     142    }
     143
     144    /**
     145     * Make mentions clickable in content areas.
     146     *
     147     * @param string $text Topic or reply content.
     148     * @return string Filtered content.
     149     */
     150    function make_mentions_clickable( $text = '' ) {
     151        return preg_replace_callback( '#([\s>])@([0-9a-zA-Z-_]+)#i', array( $this, 'make_mentions_clickable_callback' ), $text );
     152    }
     153
     154    /**
     155     * Callback to convert mention matches to HTML A tag.
     156     *
     157     * Replaces bbp_make_mentions_clickable_callback() to add `class="mention"`
     158     * for styling purposes.
     159     *
     160     * @see https://meta.trac.wordpress.org/ticket/2542
     161     * @see https://bbpress.trac.wordpress.org/ticket/3074
     162     *
     163     * @param array $matches Single Regex Match.
     164     * @return string HTML A tag with link to user profile.
     165     */
     166    function make_mentions_clickable_callback( $matches = array() ) {
     167
     168        // Get user; bail if not found
     169        $user = get_user_by( 'slug', $matches[2] );
     170        if ( empty( $user ) || bbp_is_user_inactive( $user->ID ) ) {
     171            return $matches[0];
     172        }
     173
     174        // Create the link to the user's profile
     175        $url    = bbp_get_user_profile_url( $user->ID );
     176        $anchor = '<a href="%1$s" class="mention" rel="nofollow">@%2$s</a>';
     177        $link   = sprintf( $anchor, esc_url( $url ), esc_html( $user->user_nicename ) );
     178
     179        return $matches[1] . $link;
    138180    }
    139181
Note: See TracChangeset for help on using the changeset viewer.