Подтвердите отправку на внешние ссылки в WordPress

Вот ситуация:

Этот сайт находится в WordPress, поэтому я ищу простой способ справиться с этим, не добавляя собственный Javascript в каждую ссылку.

Они фактически работают над существующим сайтом: http://clearmountainbank.com/, и я могу заставить его работать на новом сайте, добавив скрипт confirm_entry в заголовок и добавив пользовательский Javascript к каждой ссылке, но я не могу получить ссылки для открытия в новом окне.

Этот путь также занимает много времени, поскольку мне приходится вручную редактировать каждую внешнюю ссылку. Будет ли простой способ распознавать внешние ссылки и добавлять эту функциональность на весь сайт, а если нет, что я могу сделать, чтобы открыть его в новом окне?

Вот код, который я использую:

<script type="text/javascript"> <!-- function confirm_entry(varible_value) { input_box=confirm("Link Disclaimer: Bank Name provides links to web pages which are not part of the Bank Name website or clearmountainbank.com or online.bankname.com domains. These sites are not under Bank Name control, and Clear Mountain Bank is not responsible for the information or links you may find there. Bank Name is providing these links only as a convenience. The presence of these links on any Bank Name website is not intended to imply Bank Name endorsement of that site, but to provide a convenient link to relevant sites which are managed by other organizations, companies, or individuals."); if (input_box==true) { window.location.href=varible_value; } else { // Output when Cancel is clicked alert ("You have opted not to leave Bank's website."); } } --> </script> 

Вот один из способов сделать это (см. JSFiddle) :

 $("a").on("click", function() { if($(this).attr("href").indexOf("http://") == 0) { return confirm("Super long message"); } }); 
  • Это будет работать только для http:// а не https:// , оно также не проверяет, указывает ли абсолютная ссылка на ваш текущий домен, но дает вам представление о том, как подойти к нему.

Я не мог получить confirm() для работы. Но, благодаря следующим вопросам Q & A, я сделал альтернативу:

  • Открыть внешнюю ссылку в новом окне и отслеживать событие исходящего клика
  • Диалог подтверждения JQuery
  • WordPress, jQuery UI CSS Files?
  • Есть ли размещенные jQuery темы пользовательского интерфейса где угодно?
  • Почему jQuery UI 1.10 удаляет диалоговое окно jQuery zIndex?

Вы можете применить код в functions.php темы, но для этого лучше сделать плагин .

 add_action( 'wp_enqueue_scripts', 'enqueue_scripts_so_22382151' ); add_action( 'wp_header', 'print_header_so_22382151' ); add_action( 'wp_footer', 'print_footer_so_22382151' ); /** * Enqueue jQuery Dialog and its dependencies * Enqueue jQuery UI theme from Google CDN */ function enqueue_scripts_so_22382151() { wp_enqueue_script( 'jquery-ui-dialog', false, array('jquery-ui','jquery') ); wp_enqueue_style( 'jquery-ui-cdn', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/dot-luv/jquery-ui.min.css' ); } /** * Print Dialog custom style */ function print_header_so_22382151() { ?> <style> /* A class used by the jQuery UI CSS framework for their dialogs. */ .ui-front { z-index:1000000 !important; /* The default is 100. !important overrides the default. */ } .ui-widget-overlay { opacity: .8; } </style> <?php } /** * Print Dialog script */ function print_footer_so_22382151() { $current_domain = $_SERVER['SERVER_NAME']; ?> <script type="text/javascript"> jQuery(document).ready(function ($) { $('a[href^="http://"],a[href^="https://"]') .not('[href*="<?php echo $current_domain; ?>"]') .click(function(e) { e.preventDefault(); var url = this.href; $('<div></div>').appendTo('body') .html('<div><h6>Link Disclaimer: [...].</h6></div>') .dialog({ modal: true, title: 'message', zIndex: 10000, autoOpen: true, width: 'auto', resizable: false, buttons: { Yes: function () { window.open(url); $(this).dialog("close"); }, No: function () { $(this).dialog("close"); } }, close: function (event, ui) { $(this).remove(); } }); }) }); </script> <?php }