WordPress : Buddypress bp_activity_add(activity_action) masque le lien « target »

Publié par Jean-Michel le

Je développe un réseau social avec Buddypress, j’ai créé un plugin RSS pour extraire le flux RSS des sites Web spécifiés. Tout fonctionne, sauf lorsque le RSS est publié dans le flux d’activité. Lorsque je crée le contenu de l’activité pour imprimer un lien, je règle la cible du lien sur « _new » pour l’ouvrir dans une nouvelle page. Voici le code :

function wprss_add_to_activity_feed($item, $inserted_ID) {

    $permalink          = $item->get_permalink();
    $title              = $item->get_title();
    $admin              = get_user_by('login', 'admin');

    # Generates the link
    $activity_action    = sprintf( __( '%s published a new RSS link: %s - ', 'buddypress'), bp_core_get_userlink( $admin->ID ), '<a href="' . $permalink .'" target="_blank" title="'.$title.'">' . attribute_escape( wprss_limit_rss_title_chars($title) ) . '</a>');

    /* Record this in activity streams */
    bp_activity_add( array(
        'user_id' => $admin->ID,
        'item_id' => $inserted_ID,
        'action' => $activity_action,
        'component' => 'rss',
        'primary_link' => $permalink,
        'type' => 'activity_update',
        'hide_sitewide' => false
    ));

}

Il devrait arriver à quelque chose comme ça:

<a href="link" target="_new" title="link">Test</a>

Mais ça s’imprime comme ça :

<a href="link" title="link">Test</a>

Pourquoi cela arrive-t-il?

Solution n°1 trouvée

L’attribut ‘target’ est probablement supprimé par l’implémentation des filtres kses par BuddyPress. Vous pouvez ajouter l’attribut à la liste blanche comme suit :

function se16329156_whitelist_target_in_activity_action( $allowedtags ) {
    $allowedtags['a']['target'] = array();
    return $allowedtags;
}
add_filter( 'bp_activity_allowed_tags', 'se16329156_whitelist_target_in_activity_action' );

Cela ne résoudra probablement pas rétroactivement le problème des éléments d’activité existants – il est probable que l’attribut incriminé ait été supprimé avant d’être stocké dans la base de données. Mais cela devrait aider pour les articles futurs.

Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *