对话框HTML来自WP_Editors::wp_link_dialog()
但里面没有钩子。
相反,我们可以使用jQuery将自定义HTML附加到链接对话框中,并尝试覆盖,例如wpLink.getAttrs()
, 因为它很短;-)
演示示例:
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\' : \'\'
};
}
});
我只是做了一个快速测试,它似乎工作,但需要进一步的测试和调整时更新链接。
Here\'s an old hack 我这样做了,可能需要刷新一下。
更新看起来您想添加rel="nofollow"
选项,因此让我们针对这种情况更新上述方法:
我们添加rel
将属性链接到:
/**
* 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\' : \'\'
};
}
如果
rel
属性为空,则它将自动从编辑器中的链接中删除。
然后我们就可以wplink-open
打开链接对话框时激发的事件。在这里,我们可以插入自定义HTML并根据当前的链接选择进行更新:
$(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 );
}
});
其中,我们使用以下助手函数,基于
getLink()
核心函数,用于获取所选链接的HTML:
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;
}
以下是输出:
使用以下HTML:
ps:这可以进一步测试,也可以扩展到支持翻译