El diálogo HTML proviene WP_Editors::wp_link_dialog()
pero no hay ganchos allí.
En su lugar, podríamos usar jQuery para agregar el HTML personalizado al cuadro de diálogo de enlace e intentar anular, por ejemplo wpLink.getAttrs()
, el , porque es muy corto ;-)
Ejemplo de demostración:
jQuery( document ).ready( function( $ ) {
$('#link-options').append(
'<div>
<label><span>Link Class</span>
<select name="wpse-link-class" id="wpse_link_class">
<option value="normal">normal</option>
<option value="lightbox">lightbox</option>
</select>
</label>
</div>' );
wpLink.getAttrs = function() {
wpLink.correctURL();
return {
class: $( '#wpse_link_class' ).val(),
href: $.trim( $( '#wp-link-url' ).val() ),
target: $( '#wp-link-target' ).prop( 'checked' ) ? '_blank' : ''
};
}
});
Acabo de hacer una prueba rápida y parece funcionar, pero necesita más pruebas y ajustes al actualizar los enlaces. Aquí hay un viejo truco que hice que podría necesitar una actualización.
Actualizar
Parece que desea agregar la rel="nofollow"
opción al cuadro de diálogo de enlace, así que vamos a actualizar el enfoque anterior para ese caso:
Agregamos el rel
atributo de enlace con:
/**
* Modify link attributes
*/
wpLink.getAttrs = function() {
wpLink.correctURL();
return {
rel: $( '#wpse-rel-no-follow' ).prop( 'checked' ) ? 'nofollow' : '',
href: $.trim( $( '#wp-link-url' ).val() ),
target: $( '#wp-link-target' ).prop( 'checked' ) ? '_blank' : ''
};
}
Si el rel
atributo está vacío, se eliminará automáticamente del enlace en el editor.
Entonces podemos conectarnos al wplink-open
evento que se dispara cuando se abre el diálogo de enlace. Aquí podemos inyectar nuestro HTML personalizado y actualizarlo de acuerdo con la selección de enlace actual:
$(document).on( 'wplink-open', function( wrap ) {
// Custom HTML added to the link dialog
if( $('#wpse-rel-no-follow').length < 1 )
$('#link-options').append( '<div> <label><span></span> <input type="checkbox" id="wpse-rel-no-follow"/> No Follow Link</label></div>');
// Get the current link selection:
var _node = wpse_getLink();
if( _node ) {
// Fetch the rel attribute
var _rel = $( _node ).attr( 'rel' );
// Update the checkbox
$('#wpse-rel-no-follow').prop( 'checked', 'nofollow' === _rel );
}
});
donde usamos la siguiente función auxiliar, basada en la getLink()
función central, para obtener el HTML del enlace seleccionado:
function wpse_getLink() {
var _ed = window.tinymce.get( window.wpActiveEditor );
if ( _ed && ! _ed.isHidden() ) {
return _ed.dom.getParent( _ed.selection.getNode(), 'a[href]' );
}
return null;
}
Aquí está la salida:
con el siguiente HTML:
ps: Esto podría probarse más y también podría ampliarse para admitir traducciones
href
si el usuario no abre el cuadro de diálogo, sino que usa el primer cuadro emergente que tiene el marcador de posiciónPaste URL or type to search
:?mce_external_plugins
filtro para cargar el archivo de secuencia de comandos o elafter_wp_tiny_mce
gancho para inyectar el fragmento (con la parte anexa como una sola cadena de línea), para probar esto. ElgetAttrs
método aquí solo anulará el valor del cuadro de diálogo de configuración del enlace, no he investigado cómo anular el valor de la entrada en línea. Tal vez anular elwp_link_apply
comando si es posible? Creo que esta podría ser una buena pregunta nueva ;-) @ Dan9tinymce.ui.Control.extend.setUrl
en el complementowp-includes/js/tinymce/plugins/wplink/plugin.js
.Mirando el núcleo, no hay rastro de ningún filtro o acción en la
wp_link_dialog
función, lo que habría hecho su vida más fácil ...Investigando cómo otros han resuelto este problema, hay un complemento que hace más o menos lo mismo que tú quieres. Básicamente, elimina el registro de wplink.js
wp_deregister_script('wplink');
y vuelve a registrar una versión modificada del archivo, esta vez incluyendo el campo adicional deseado.Aunque no creo que este sea el mejor método (teniendo en cuenta posibles conflictos posteriores al actualizar WordPress), creo que es el wat más fácil de obtener.
¡Espero eso ayude!
fuente