Tag: Wordpress

Wordpress: mostrare i post correlati per tag

I post correlati sono un elenco di articoli che trattano lo stesso argomento del post che stiamo leggendo.
In questo post mostreremo un esempio di come visualizzare i post correlati per tag.

Questo il codice completo:

<?php 
	global $post;
	$posttags = wp_get_post_tags($post->ID);
	if ($posttags) {
		$tags = array();
		$blacklist = array('blacklist');
		foreach ($posttags as $t) {
			if(!in_array(strtolower($t->name),$blacklist)) {
				$tags[] = str_replace(' ','-',$t->name); 
			}
		}
		$ts = implode(",", $tags);
		$args = array(
				'numberposts' => 3,
				'tag'=> $ts,
				'exclude' => $post->ID,
				'orderby' => 'post_date',
				'order' => 'desc'
				);
		$related = get_posts($args); ?>
		<?php if ($related) { ?>
		<?php // Salviamo $post in una variabile temporanea ?>
		<?php $post_TEMP = $post; ?>
			<ul>
				<li>Articoli correlati<li>
			<?php foreach ($related as $post) { ?>
				<?php setup_postdata($post); ?>
				<li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
			<?php } ?>
			</ul>
			<?php		
			// Resettiamo la variabile $post
			$post = $post_TEMP;
			setup_postdata($post);
		}
	}
?>

Analizziamo il codice:

global $post;
$posttags = wp_get_post_tags($post->ID);

Prima di tutto rendiamo globale la variabile $post per rendere disponibili i dati del post, mentre con la funzione wp_get_post_tags() recuperiamo i tag associati al post.

$tags = array();
$blacklist = array('blacklist');
foreach ($posttags as $t) {
	if(!in_array(strtolower($t->name),$blacklist)){
		$tags[] = str_replace(' ','-',$t->name); 
	}
}

Verificato che ci sono tag associati al post, possiamo impostare un controllo per escludere dei tag specifici dal filtro per correlare i post. Per impostare i tag da escludere, aggiungere i termini desiderati nell’array $blacklist. Inoltre, nel ciclo dove si filtrano i tag da eslcudere, con la funzione str_replace() convertiamo i gli spazi bianchi dei tag contenenti più parole, in modo da avere lo slug del tag.

$ts = implode(",", $tags);

Creiamo una variabile $ts formattando i tag per la query,

$args = array(
		'numberposts' => 3,
		'tag'=> $ts,
		'exclude' => $post->ID,
		'orderby' => 'post_date',
		'order' => 'desc'
		);
$related = get_posts($args);

Creiamo una array per impostare i parametri della query e con la funzione get_posts() i post correlati. In questo esempio i post visualizzati sono 3, ma basta cambiare il valore di numberposts per visualizzare più o meno post correlati.

// Salviamo $post in una variabile temporanea
$post_TEMP = $post;

Verificato che ci siano post correlati, salviamo la variabile $post in una variabile temporanea, in modo da usare le funzioni native di Wordpress per visualizzare le informazioni dei post correlati.

<ul>
<li><h3 class="georgia italic fsize-24">Articoli correlati</h3><li>
<?php foreach ($related as $post) { ?>
<?php setup_postdata($post); ?>
	<li class="post-related georgia italic"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a> </li>
<?php } ?>
</ul>

Questo è il codice che stampa a video l’elenco dei post correlati. In questo esempio, visualizziamo solo il titolo dei post correlati, ma basta richiamare le funzioni di Wordpress per visualizzare le informazioni dei singoli post (es. the_author()).

// Reset $post
$post = $post_TEMP;
setup_postdata($post);

Infine resettiamo la variabile $post e il gioco è fatto.

Note: Puoi vedere il codice funzionante, alla fine di questo post.

{ 5 Commenti }

Wordpress: soluzione all’errore dell’output del feed

xmlIl feed di Wordpress, a volte visualizza un errore perché vengono stampati degli spazi bianchi prima della dichiarazione XML, invalidando così il file.

Il messaggio di errore visualizzato è:

XML Parsing Error: XML or text declaration not at start of entity

oppure, se stai usando il validatore di W3:

XML Parsing Error: XML declaration allowed only at the start of the document

Questo significa che prima del carattere < ci sono caratteri inaspettati (in questo caso degli spazi bianchi) che devono essere rimossi per una corretta dichiarazoine XML.

Cercando su internet una possibile soluzione non troppo invasiva, ho trovato un metodo semplice per risolvere il problema. Quello che bisogna fare è aggiungere una funzione nel processo di creazione del feed di Wordpress che cancelli gli eventuali caratteri stampati prima della dichiarazione XML.

Il file di riferimento è: wp-includes/feed-rss2.php

Aprire il file con un editore di testo e, subito dopo il seguente codice, posizionato all’inizio del file

1
2
header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true);
$more = 1;

inserire il seguente codice:

3
4
5
$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();

Ripetere questi passaggi per il feed dei commenti: feed-rss2-comments.php.

Note: si consiglia ripetere i passaggi precedenti per tutti i file che generano i feed: feed-rss2-comments.php, feed-rss.php, feed-rdf.php, feed-atom.php, feed-atom-comments.php.

Via w3it.org

{ Un Commento }

Velocizzare Wordpress (ma non solo) lato server con APC

“Wordpress è una piattaforma leggera e performante”. Vero. Cosa succede però se installiamo una decina di plugin super-fighi oppure il nostro tema troppo-web-2.0 (dove il requisito per essere 2.0 è di fare più di 100 query al database per aggregare gli stessi dati in 800 modi diversi)?

Esistono diverse regole di profilassi meno drastiche della soluzione che vi proponiamo in questo post e se non le avete ancora provate, o semplicemente non sapete di cosa diavolo stiamo parlando, vi esortiamo a dare un’occhio su google ai numerosi tutorial che trattano questa tematica. Se invece siete utenti più smaliziati, oppure le avete provate tutte e rischiate il posto di lavoro, quello che fa per voi si chiama APC.

APC è l’acronimo di Alternative PHP Cache ed è un sistema di caching del bytecode di PHP che viene distribuito sotto forma di estensione di PHP ed è incluso nel pacchetto PECL (verrà incluso di default nel core di PHP a partire dalla versione 6).

APC permette di immagazinare in cache le porzioni di codice PHP che vengono eseguite più frequentemente. L’impatto sulle performance è rilevante (kifulab.net è passato da 1.2 secondi a 0.7 secondi come tempo di generazione dell’homepage) e se usato insieme ad altre tecniche di ottimizzazione può dare molte soddisfazioni soprattutto se usato su siti ad alto traffico.

Per installare APC è necessario disporre degli accessi al server come amministratore e di avere un minimo di dimestichezza con apache e i file di configurazione di PHP.

Da riga di comando basta soltanto digitare:

pecl install apc

Pecl si occuperà di installare, compilando, l’estensione di PHP (se non avete PECL installato dovete installare il pacchetto php-devel).

Nel file php.ini (tipicamente collocato in /etc/php.ini) cercate la sezione dedicata alle estensioni e inserite la seguente riga di codice

extension=apc.so

Et voilà, abbiamo finito. Riavviate apache

/etc/init.d/httpd restart

E il gioco è fatto. Ovviamente l’estensione ha diverse configurazioni per le quali vi rimando alla documentazione ufficiale.

{ Nessun Commento }

Pagina 5 di 8« Prima...«456»5...Ultima »