web-dev-qa-db-fra.com

onClick inside post_content n'apparaît pas dans l'éditeur post-tinymce

Je fais une migration. J'ai créé un script PHP pour générer des publications dans la nouvelle base de données WordPress. Le contenu de la publication contient un lien HTML contenant href="javascript:" et onClick="trackOutboundLink('url')".

post_content dans la nouvelle base de données

<div>
  <a class="exclusive button-exclusive" href="javascript:" onclick="trackOutboundLink('url'); return false;" rel="nofollow"><span>&#9655; Text link</span></a>
</div>

Pour une raison quelconque, les attributs href et onclick ne figuraient pas dans l'éditeur de publication d'administrateur. Pourquoi? Comment puis-je réparer cela?

1
J.BizMai

Par défaut, TinyMCE définit allow_script_urls sur false, ce qui entraîne la suppression de l'attribut href et de la valeur du lien.

Toujours dans l'intérêt des meilleures pratiques, TinyMCE n'autorise pas l'attribut onlcick sur les liens par défaut. Cela peut être changé aussi.

Le hook tiny_mce_before_init peut être utilisé pour modifier les options de TinyMCE afin que ce contenu ne soit pas supprimé:

/**
 * Filters the TinyMCE config before init.
 *
 * @param array  $mceInit   An array with TinyMCE config.
 * @param string $editor_id Unique editor identifier, e.g. 'content'.
 */
add_filter( 'tiny_mce_before_init', 'wpse_tiny_mce_before_init', 10, 2 );
function wpse_tiny_mce_before_init( $mceInit, $editor_id ) {
    // Allow javascript: in href attributes.
    $mceInit['allow_script_urls'] = true;

    // Allow onclick attribute in anchor tags.
  if ( ! isset( $mceInit['extended_valid_elements'] ) ) {
        $mceInit['extended_valid_elements'] = '';
    } else {
        $mceInit['extended_valid_elements'] .= ',';
    }
    $mceInit['extended_valid_elements'] .= 'a[href|rel|class|id|style|onclick]';

    return $mceInit;
}
2
Dave Romsey