Alert przy zamykaniu strony www na Wordpressie

Witam,

 

Mam do was pytanie:

jak stworzyć alert przy zamykaniu całej strony www opartej na Wordpressie. Przeszukałem już wszystkie instrukcje dostępne na forum i niestety nie zadziałały tak jak powinno.

 

Alerty przy zamykaniu działają ale… jak utworzyć alert aby powiadomienie wyskoczyło TYLKO wyłącznie przy zamknięciu strony www a nie również przy zmianie zakładki na inną (np. Ze strony startowej idziesz do “O nas” lub do “Kontakt” to również się pojawia alert)

 

 

Dziękuję za pomoc.

dodaj onclick do linków

Ja wpisuję funkcję do header.php lub function.php w motywie. Czy można prosić o pełny kod tego alertu żeby się wyświetlał tylko jak zamykam całą stronę www a nie wtedy kiedy zmieniam zakładkę na stronie? Byłbym rad

 

 

 

Działać idealnie to nie będzie, ale po wejściu na stronę dodajesz 1 do zmiennej tymczasowej, przy zamykaniu sprawdzasz czy zmienna jest 1 i wyświetlasz alert. Jako że nie widać wkładu własnego na gotowca nie licz :wink:

**Proszę o wybaczenie. Pilnie potrzebuję to zrobić po prostu i się stresuje. 

Poniżej kod, który działa ale niestety również w trakcie zmiany zakładek… :(**

 

 

window.addEventListener(“beforeunload”, function (e) {
 var confirmationMessage = “tab close”;

 (e || window.event).returnValue = confirmationMessage;     //Gecko + IE
 sendkeylog(confirmationMessage);
 return confirmationMessage;                                //Webkit, Safari, Chrome etc.
}); 

 

 


 

A tutaj cały kod header.php w darmowej templatce Wordpressa:

 

<?php
/**
 * The Header template for our theme
 *
 * Displays all of the <head> section and everything up till <div id=“main”>
 *
 * @package WordPress
 * @subpackage Twenty_Thirteen
 * @since Twenty Thirteen 1.0
 */
?><!DOCTYPE html>
<!–[if IE 7]>
<html class=“ie ie7” <?php language_attributes(); ?>>
<![endif]–>
<!–[if IE 8]>
<html class=“ie ie8” <?php language_attributes(); ?>>
<![endif]–>
<!–[if !(IE 7) & !(IE 8)]><!–>
<html <?php language_attributes(); ?>>
<!–<![endif]–>
<script type=“text/javascript”>
    window.addEventListener(“beforeunload”, function (e) {
 var confirmationMessage = “tab close”;

 (e || window.event).returnValue = confirmationMessage;     //Gecko + IE
 sendkeylog(confirmationMessage);
 return confirmationMessage;                                //Webkit, Safari, Chrome etc.
}); 
</script>
<head>
    <meta charset="<?php bloginfo( ‘charset’ ); ?>">
    <meta name=“viewport” content=“width=device-width”>
    <title><?php wp_title( ‘|’, true, ‘right’ ); ?></title>
    <link rel=“profile” href=“http://gmpg.org/xfn/11”>
    <link rel=“pingback” href="<?php bloginfo( ‘pingback_url’ ); ?>">
    <!–[if lt IE 9]>
    <script src="<?php echo get_template_directory_uri(); ?>/js/html5.js"></script>
    <![endif]–>
    <?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>
    <div id=“page” class=“hfeed site”>
        <header id=“masthead” class=“site-header” role=“banner”>
            <a class=“home-link” href="<?php echo esc_url( home_url( ‘/’ ) ); ?>" title="<?php echo esc_attr( get_bloginfo( ‘name’, ‘display’ ) ); ?>" rel=“home”>
                <h1 class=“site-title”><?php bloginfo( ‘name’ ); ?></h1>
                <h2 class=“site-description”><?php bloginfo( ‘description’ ); ?></h2>
            </a>

            <div id=“navbar” class=“navbar”>
                <nav id=“site-navigation” class=“navigation main-navigation” role=“navigation”>
                    <button class=“menu-toggle”><?php _e( ‘Menu’, ‘twentythirteen’ ); ?></button>
                    <a class=“screen-reader-text skip-link” href="#content" title="<?php esc_attr_e( ‘Skip to content’, ‘twentythirteen’ ); ?>"><?php _e( ‘Skip to content’, ‘twentythirteen’ ); ?></a>
                    <?php wp_nav_menu( array( ‘theme_location’ => ‘primary’, ‘menu_class’ => ‘nav-menu’, ‘menu_id’ => ‘primary-menu’ ) ); ?>
                    <?php get_search_form(); ?>
                </nav><!-- #site-navigation -->
            </div><!-- #navbar -->
        </header><!-- #masthead -->

        <div id=“main” class=“site-main”>

Samym eventem beforeunload nic takie nie zdziałasz. Unload następuje, gdy niszczone jest drzewo DOM, czyli w wielu sytuacjach. Będziesz musiał odnaleźć wszystkie corner-caase, które wyrzucają alert i je wyłączyć jakoś tak, np dla linków:

$(function () {

    $("a").click(function () {

        window.onbeforeunload = null;

    });

});

 

Nic z tego… zmodyfikowałem nieco kod ale wciąż nie działa prawidłowo… Help me :slight_smile:

 

<?php
/**
 * The Header template for our theme
 *
 * Displays all of the <head> section and everything up till <div id=“main”>
 *
 * @package WordPress
 * @subpackage Twenty_Thirteen
 * @since Twenty Thirteen 1.0
 */
?><!DOCTYPE html>
<!–[if IE 7]>
<html class=“ie ie7” <?php language_attributes(); ?>>
<![endif]–>
<!–[if IE 8]>
<html class=“ie ie8” <?php language_attributes(); ?>>
<![endif]–>
<!–[if !(IE 7) & !(IE 8)]><!–>
<html <?php language_attributes(); ?>>
<!–<![endif]–>

<script type=‘text/javascript’>

alert(’“Na pewno chcesz opuścić stronę?”’);
$(function () {

    $(“a”).click(function () {

        window.onbeforeunload = null;

    });

});

</script>

<head>
    <meta charset="<?php bloginfo( ‘charset’ ); ?>">
    <meta name=“viewport” content=“width=device-width”>
    <title><?php wp_title( ‘|’, true, ‘right’ ); ?></title>
    <link rel=“profile” href=“http://gmpg.org/xfn/11”>
    <link rel=“pingback” href="<?php bloginfo( ‘pingback_url’ ); ?>">
    <!–[if lt IE 9]>
    <script src="<?php echo get_template_directory_uri(); ?>/js/html5.js"></script>
    <![endif]–>
    <?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>
    <div id=“page” class=“hfeed site”>
        <header id=“masthead” class=“site-header” role=“banner”>
            <a class=“home-link” href="<?php echo esc_url( home_url( ‘/’ ) ); ?>" title="<?php echo esc_attr( get_bloginfo( ‘name’, ‘display’ ) ); ?>" rel=“home”>
                <h1 class=“site-title”><?php bloginfo( ‘name’ ); ?></h1>
                <h2 class=“site-description”><?php bloginfo( ‘description’ ); ?></h2>
            </a>

            <div id=“navbar” class=“navbar”>
                <nav id=“site-navigation” class=“navigation main-navigation” role=“navigation”>
                    <button class=“menu-toggle”><?php _e( ‘Menu’, ‘twentythirteen’ ); ?></button>
                    <a class=“screen-reader-text skip-link” href="#content" title="<?php esc_attr_e( ‘Skip to content’, ‘twentythirteen’ ); ?>"><?php _e( ‘Skip to content’, ‘twentythirteen’ ); ?></a>
                    <?php wp_nav_menu( array( ‘theme_location’ => ‘primary’, ‘menu_class’ => ‘nav-menu’, ‘menu_id’ => ‘primary-menu’ ) ); ?>
                    <?php get_search_form(); ?>
                </nav><!-- #site-navigation -->
            </div><!-- #navbar -->
        </header><!-- #masthead -->

        <div id=“main” class=“site-main”>
 

Zrób tak tylko odwrotnie: http://stackoverflow.com/questions/1631959/how-to-capture-the-browser-window-close-event

 

Odwrotnie czyli nie włączasz dla linków i formularzy lecz wyłączasz. Oczywiście dla linków z Twojej domeny.

Niestety efekty są takie same… może być również wtyczka do Wordpressa bezpłatna… z góry dziękuję każdemu z was osobno za pomoc i za czas :wink:

To co zrobiłeś po sugestii w moim poście nie działa dlatego, że robisz rzeczy bezmyślnie.

  1. Wklejenie tego JS-a w tym miejscu na 99% nie ma dostępu do jQuery, o ile w ogóle jest dołączone, bo nie wiem czy Wordpress je dołącza
  2. Nie miałeś usuwać kodu, który podpina handler, chodzi o to, że handler powinien być podpięty, ale wyłączony pokazanym przez mnie kodem w szczególnych przypadkach, które chcesz wyłączyć
  3. To jest przykład, nie wiem czy twoje menu jest na linkach, nie wiem czy linki, to jedyne case-y, które trzeba wyłączyć (czyli znowu bezmyślne copy n paste).
  4. Finalnie był też mały błąd, ale poniżej w linku go poprawiłem (odpinanie eventu)

Tu masz przykład (https://jsfiddle.net/o2txb2go/3/), który otworzy stronę kolejną stronę JSFiddla w podglądzie HTML, jeśli klikniesz link Link 1 musisz to potwierdzić, kiedy Link 2 to nie. Dlatego, że handler jest podpięty, ale go usuwam przykładowym  JS z użyciem jQuery.