web-dev-qa-db-fra.com

Comment configurer les cookies pour changer de feuille de style lorsqu'un clic est effectué sur un lien et le définir jusqu'à ce qu'un autre lien particulier soit cliqué?

J'ai un très vieux site. Maintenant, je veux le rendre réactif sans changer le thème ni sa feuille de style.

Exigences:

  1. Impossible de changer le thème.
  2. Impossible de créer un thème enfant.
  3. Par défaut, le site devrait être chargé comme non réactif lors de notre visite.
  4. Lorsque vous cliquez sur un "lien de commutation", l'ensemble du site doit être réactif.
  5. Quand un autre 'lien de commutateur' est cliqué, le site doit être chargé par défaut (Non réactif)

J'ai donc décidé de

  1. enqueue une feuille de style distincte lorsque vous cliquez sur un switcher link. : Lien pour rendre le site responsive
  2. enqueue la feuille de style par défaut lorsqu'un autre switcher link est cliqué. : Lien pour revenir au site non réactif par défaut.

Ensuite, j'ai mis les deux liens suivants dans mon header.php

<a href="?site=mobile" class="mobile_site" id="mobile_site"><img src="http://i60.tinypic.com/dza06h.jpg" alt="switch to mobile site"></a>
<a href="?site=desktop" class="desktop_site"><img src="http://i61.tinypic.com/2iu3vl.jpg" alt="switch to desktop site"></a>

Je mets le code suivant dans mon functions.php

$site=$_GET['site'];

if ($site == 'mobile'){
    function responsive_css(){
        wp_enqueue_style(
            'wpa_custom',
            get_template_directory_uri() . '/css/responsive.css'
        );
    }
    add_action( 'wp_enqueue_scripts', 'responsive_css', 999 );
}

if ($site == 'desktop'){
    function default_css(){
        wp_enqueue_style(
            'default_css',
            get_template_directory_uri() . '/style.css'
        );
    }
    add_action( 'wp_enqueue_scripts', 'default_css', 999 );
}

et j'ai ajouté un dossier appelé css dans mon répertoire de modèles, qui contient responsive.css.

et alors

  1. lorsque je clique sur le mobile link (class=mobile_site), tout le site est réactif. Le lien de site devient www.mysite.com/?site=mobile
  2. lorsque je clique sur le desktop link (class=desktop_site), le site entier devient non réactif (le site par défaut est chargé avec son style.css par défaut). Le lien de site devient www.mysite.com/?site=desktop

VOILA .... !!!!

MAIS LE NUMÉRO EST:

Après avoir cliqué sur le lien du mobile si je visite d'autres pages/publications, l'ensemble du site devient non réactif. Il est réactif si je suis dans la page d'accueil uniquement (après avoir cliqué sur le lien du mobile)

Pour les autres pages et la publication, je dois cliquer sur le mobile link AGAIN pour le rendre réactif. En résumé, les utilisateurs doivent cliquer sur le mobile link chaque fois qu'ils visitent des (nouveaux) messages/pages s'ils veulent le site réactif.

J'ai compris que le problème est I did not set a cookie lorsque l'utilisateur clique sur mobile link ou desktop link.

J'ai fait référence à PHP cookies et à d'autres tutoriels, mais je n'ai pas réussi à le faire fonctionner.

Maintenant, les exigences sont (avec les 5 mentionnés ci-dessus)

  1. le site doit rester actif après le clic sur la mobile link (class="mobile_site") jusqu'à ce que le desktop link(class="desktop_site") soit à nouveau cliqué.
  2. les cookies doivent être supprimés à la fermeture de l'onglet/du navigateur.

Comment puis-je le faire en utilisant PHP?

* S'IL VOUS PLAÎT, ne vous contentez pas de voter ** et dites que c'est plus lié à PHP et demandez dans stack overflow. C'est mélangé et je le demande ici. Plutôt que de voter, faites des suggestions s'il vous plaît.

1
Foolish Coder

Vous pouvez utiliser l'action init pour définir le cookie et toute autre action init pour le lire. Cependant, c'est un cookie ... vous devrez également vérifier la variable GET.

add_action('init', 'is_it_mobile_or_desktop', 1);

function is_it_mobile_or_desktop(){
    if (isset($_GET['site']) && in_array($_GET['site'], array('mobile', 'desktop')) ) {
        setcookie( 'site', $_GET['site'], time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
    }
}

add_action('init', 'who_am_i', 2);
function who_am_i(){

    $site = isset($_GET['site']) && in_array($_GET['site'], array('mobile', 'desktop')) ?  $_GET['site']
            : (isset($_COOKIE['site']) && in_array($_COOKIE['site'], array('mobile', 'desktop'))  ? $_COOKIE['site'] : 'default_case');

    if ($site == 'mobile'){
        function responsive_css(){
            wp_enqueue_style(
                'wpa_custom',
                get_template_directory_uri() . '/css/responsive.css'
            );
        }
        add_action( 'wp_enqueue_scripts', 'responsive_css', 999 );
    } else {
        function default_css(){
            wp_enqueue_style(
                'default_css',
                get_template_directory_uri() . '/style.css'
            );
        }
        add_action( 'wp_enqueue_scripts', 'default_css', 999 );
    }
}
1
Butuzov