-
Cookie si cancella prima
Ho questo codice che mette la parola New sulle immagini-anteprime dei nuovi articoli, il cookie è impostato su 30 giorni, però se io aggiorno la home o se clicco un'altra anteprima-articolo anche vecchio, poi ritorno al nuovo articolo e la marcatura New è sparita.
Non dovrebbe durare 30 giorni?
Codice PHP:
/* Codice che marca i nuovi articoli con "New" */
function wpb_lastvisit_the_title ( $title, $id ) {
if ( !in_the_loop() || is_singular() || get_post_type( $id ) == 'page' ) return $title;
// if no cookie then just return the title
if ( !isset($_COOKIE['lastvisit']) || $_COOKIE['lastvisit'] == '' ) return $title;
$lastvisit = $_COOKIE['lastvisit'];
$publish_date = get_post_time( 'U', true, $id );
if ($publish_date > $lastvisit) $title .= '<span class="new-article">New</span>';
return $title;
}
add_filter( 'the_title', 'wpb_lastvisit_the_title', 10, 2);
// Set the lastvisit cookie
function wpb_lastvisit_set_cookie() {
if ( is_admin() ) return;
$current = current_time( 'timestamp', 1);
setcookie( 'lastvisit', $current, time()+3600*24*30, COOKIEPATH, COOKIE_DOMAIN ); //Dura 30 giorni
}
add_action( 'init', 'wpb_lastvisit_set_cookie' );
CSS
Codice PHP:
/* Formatta la parola "New" nelle anteprime dei nuovi articoli */
.new-article {
background: #feffdd;
font-size: 1em;
font-weight: normal;
color: #ff0000;
padding: 3px;
margin-left: 10px;
border: 1px solid #eeefd2;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
-
Non ho provato il codice, ma dovrebbe rimanere per 30 giorni. Personalmente non ho mai utilizzato quella funzione con i parametri path edomain, ma non credo siano fonte del problema.
Hai verificato il corretto assegnamento del cookie tramite gli strumenti per sviluppatori del browser?
Il tuo browser blocca i cookies?
Ciao!
-
@albenessereblog non ti serve uno scambio tra cliente e server ma solo dal server.. La risposta sta nella domanda su ciò che devi fare... "Ho bisogno di evidenziare i POST che non superano i 30 GG di vita"?
1)Prelevo la data di creazione del singolo POST
2)Verifico se non sono passati più di 30 GG dalla creazione del POST all'ora corrente del server.
3)Modifico la visualizzazione dei POST (far visualizzare la scritta New solo se è vero il punto 2)..
la funzione setcookie non viene utilizzata correttamente poiché devi esplicare "correttamente" il percorso e il dominio o altrimenti se non specificati saranno per il percorso root e le altre sottocartelle e il dominio corrente (se ricordo bene ciò che fu scritto in precedenza sul manuale php)
Purtroppo non si tratta di solo codice php ma bensì di codice php abbinato al linguaggio di un'applicazione (per fare qualcosa bisogna conoscere questa applicazione)..
Visto che si parla di WordPress puoi provare a chiedere direttamente nel forum wordpress.org con i tre punti che ti ho indicato..
Ps. Funzionamento setcookie preparo l'invio del cookie che forse (l'utente puo decidere di bloccare i cookie dal proprio cliente) sarà re inoltrato dal cliente alla prossima richiesta.
-
A prima vista mi sembra che venga utilizzato e condiviso lo stesso cookie per tutti gli articoli. Di conseguenza, cliccando su un articolo qualunque, il cookie viene aggiornato e tutti gli altri articoli non risultano più new.
-
Ho trovato un plugin che fa per me: Mark New Posts