Uno sticky post è un articolo che rimane sempre in prima posizione in home page indipendentemente dalla data di pubblicazione.

Per creare uno sticky post è necessario accedere all’area di modifica dei post e, nella scheda pubblica sotto visibilità, spuntare il check box ‘Mantenere questo articolo sempre in prima pagina‘.

sticky-post-primo-piano

Come funzionano gli sticky post

Se apriamo il file /wp-includes/query.php (file da non modificare) possiamo trovare il punto in cui viene verificata la presenza di sticky post, i quali eventualmente vengono posizionati prima degli altri contenuti.

// Put sticky posts at the top of the posts array
$sticky_posts = get_option('sticky_posts');
if ( $this->is_home && $page <= 1 && is_array($sticky_posts) && !empty($sticky_posts) && !$q['ignore_sticky_posts'] ) {
	$num_posts = count($this->posts);
	$sticky_offset = 0;
	// Loop over posts and relocate stickies to the front.
	for ( $i = 0; $i < $num_posts; $i++ ) {
		if ( in_array($this->posts[$i]->ID, $sticky_posts) ) {
			$sticky_post = $this->posts[$i];
			// Remove sticky from current position
			array_splice($this->posts, $i, 1);
			// Move to front, after other stickies
			array_splice($this->posts, $sticky_offset, 0, array($sticky_post));
			// Increment the sticky offset. The next sticky will be placed at this offset.
			$sticky_offset++;
			// Remove post from sticky posts array
			$offset = array_search($sticky_post->ID, $sticky_posts);
			unset( $sticky_posts[$offset] );
		}
	}

Come personalizzare uno sticky post

Il check box per uno sticky post ha effetto solo nell’home page del blog. Tuttavia è possibile riconoscere uno sticky post in qualsiasi file template utilizzando il tag condizionale is_sticky();. Abbiamo quindi la possibilità di applicare una formattazione particolare per metterlo in evidenza. Allo stesso scopo possiamo utilizzare le classi css generate della funzione post_class();

Come visualizzare gli sticky post in un loop secondario

Per ottenere l’id di tutti i post in evidenza:

$idsticky = get_option( 'sticky_posts' );
/*
print_r( $idsticky )
Array
(
    [0] => 356
    [1] => 874
)
*/

Per visualizzare l’ultimo sticky post

$args = array(
	'posts_per_page' => 1,
	'post__in'  => $idsticky,
	'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

Rimuovere gli sticky post dal loop principale

//functions.php
     function isw_ignora_sticky( $query )
    {
        if (is_home() && $query->is_main_query())
            $query->set('ignore_sticky_posts', true );
    }
    add_action('pre_get_posts', 'isw_ignora_sticky');  


  inStileWeb.com
blog comments powered by Disqus