2010-02-16 4 views
0

Je pense (j'espère) que ma question est plus simple que la façon dont je l'ai formulée, mais c'est aussi la raison pour laquelle je viens à vide sur Google. Il est similaire à cela, mais je dois gérer certains HTML avec elle et je suis un peu clair: Random image displayComment faire pivoter deux images dans la barre latérale de wordpress?

Dans la barre latérale de mon installation Wordpress J'ai deux images dans cet ordre:

<a href="http://www.link1.tld"><img src="files/image1.jpg" border="0" /></a> 
<a href="http://www.link2.tld"><img src="files/image2.jpg" border="0" /></a> 

Quel est le plus facile façon d'accomplir la rotation de cet ordre lorsque la page est rafraichie (de sorte que la commande sera image2/image1)? Et lors de la prochaine actualisation, retournez à image1/image2?

+0

Voulez-vous le faire tourner toujours ou être au hasard? – nortron

+0

Idéalement, je voudrais qu'il tourne - J'ai mis à jour le titre pour réfléchir, merci. – scraft3613

Répondre

1

Pour ce faire, vous aurez besoin de stocker un compteur de vue dans un cookie avec l'utilisateur et afficher en fonction de ce compteur:

session_start(); 
if(!isset($_SESSION['views'])) { 
    $_SESSION['views'] = 0; 
} 
else { 
    $_SESSION['views']++; 
} 

puis à afficher:

<?php if($_SESSION['views'] % 2 == 0): ?> 
<a href="http://www.link1.tld"><img src="files/image1.jpg" border="0" /></a> 
<? endif; ?> 
<a href="http://www.link2.tld"><img src="files/image2.jpg" border="0" /></a> 
<?php if($_SESSION['views'] % 2 == 1): ?> 
<a href="http://www.link1.tld"><img src="files/image1.jpg" border="0" /></a> 
<? endif; ?> 

Si le compteur de vue est même il imprimera image1 d'abord. Si c'est bizarre, il sera imprimé en second.

Mise à l'échelle ce à plus de deux images pourrait être fait comme ceci:

// map of images to URLs 
$images = array(
    'image1.jpg' => 'http://www.link1.tld', 
    'image2.jpg' => 'http://www.link2.tld', 
    'image3.jpg' => 'http://www.link3.tld', 
    'image4.jpg' => 'http://www.link4.tld', 
); 

// reorder the list of images based on the current view count 
$ordered = array_merge(array_slice($images, $_SESSION['views'] % count($images)), array_slice($images, 0, $_SESSION['views'] % count($images))); 

et l'affichage des boucles seulement à travers la liste ordonnée:

<?php foreach($ordered as $image => $url): ?> 
<a href="<?php echo $url; ?>"><img src="files/<?php echo $image; ?>" border="0" /></a> 
<?php endforeach; ?> 
+0

Techniquement, vous stockez les valeurs de comptage dans la session, et l'utilisateur reçoit un cookie avec l'ID de session, afin que PHP puisse assigner la session à l'utilisateur, mais les données de session ne sont pas stockées côté client. ne pas utiliser de sessions PHP natives comme codeigniter) – Residuum

+0

Obtention "Attention: session_start() [function.session-start]: Impossible d'envoyer un cookie de session - en-têtes déjà envoyés par (sortie démarrée sur/home/wp-content/plugins/audio-player /audio-player.php:663) dans /home/wp-content/themes/softpattern/sidebar.php sur la ligne 86 " Si je désactive le plugin, j'obtiens la même erreur pour un plugin différent. Où devrait être placé le morceau session_start() du php? – scraft3613

+1

@ scraft3613 session_start() doit être appelée avant que toute sortie ne soit envoyée au navigateur et doit être déplacée hors de votre fichier de barre latérale, probablement dans wp-config.php. Voir ceci pour plus de détails: http://www.frank-verhoeven.com/using-session-in-wordpress/ – nortron

Questions connexes