Cum să adăugați filtre în portofoliul dvs. WordPress

Publicat: 2016-03-21

Luna trecută, v-am arătat cum să creați un site de portofoliu pe WordPress folosind un tip de postare personalizat, o nouă interogare „proiecte” și câteva șabloane noi.

În această postare, vă voi arăta cum să adăugați filtre la pagina dvs. de portofoliu folosind biblioteca Isotope.js.

adauga-filtre-wordpress-portfolio-toate

Dacă nu ați făcut-o deja, accesați site-ul dvs. WordPress, creați câteva categorii și atribuiți-le articolelor din portofoliu. Dacă citiți primul articol, folosesc din nou un CPT numit „Proiecte”, așa că pentru fiecare proiect adăugat pe site-ul meu WordPress, va trebui să mă asigur că o categorie este atribuită. Pe site-ul meu, proiectele mele vor fi clasificate fie ca „Construcții noi”, fie „Renovari”.

Odată ce ați atribuit o categorie fiecăruia dintre proiectele dvs., este timpul să adăugați JavaScript care va face munca de filtrare elegantă pentru dvs.

Isotope.js este o bibliotecă de layout dezvoltată de David DeSandro. Este gratuit pentru sursă deschisă și uz personal, cu toate acestea, pentru uz comercial, trebuie să achiziționați o licență. Vă rugăm să consultați pagina de licență pentru mai multe informații și prețuri.

Deci, să adăugăm fișierul isotope.js pe site-ul dvs. În mod ideal, ați adăuga acest lucru într-un director numit /js/ în tema copilului pentru a vă asigura că actualizările nu îl șterg niciodată.

De asemenea, trebuie să creați încă un fișier și să-l adăugați în directorul dvs. /js/ . Acest fișier va conține jQuery necesar pentru a viza proiectele dvs. În exemplul meu, am numit acest fișier projects.js .

Lipiți următorul cod în acel fișier și salvați-l. Lucrurile cheie de remarcat în acest fișier sunt #projects , .project-item și #filters . Acesta este fișierul în care puteți schimba și layoutMode: la zidărie, ambalare, cellsByColumn și multe altele. În acest tutorial, folosesc modul grilă.

jQuery(function ($) {

// initialize Isotope after all images have loaded

var $container = $('#projects').imagesLoaded( function() { //The ID for the list with all the blog posts

$container.isotope({ //Isotope options, 'item' matches the class in the PHP

itemSelector : '.project-item',

grid: {

columnWidth: 200

}

});

});

 
//Add the class selected to the item that is clicked, and remove from the others

var $optionSets = $('#filters'),

$optionLinks = $optionSets.find('a');
$optionLinks.click(function(){

var $this = $(this);

// don't proceed if already selected

if ( $this.hasClass('selected') ) {

return false;

}

var $optionSet = $this.parents('#filters');

$optionSets.find('.selected').removeClass('selected');

$this.addClass('selected');
//When an item is clicked, sort the items.

var selector = $(this).attr('data-filter');

$container.isotope({ filter: selector });
return false;

});

});

Odată ce ați adăugat acest cod pe site-ul dvs., este timpul să puneți fișierele în coadă. Dacă functions.php ale temei copilului dumneavoastră are deja o funcție declarată pentru a face acest lucru, va trebui doar să adăugați o linie de cod ca cea de mai jos.

wp_enqueue_script('isotope', get_stylesheet_directory_uri() . '/js/isotope.pkgd.min.js', array(), '1.0.0', true );

wp_enqueue_script('projects', get_stylesheet_directory_uri() . '/js/projects.js', array(), '1.0.0', true );

Notă, get_stylesheet_directory_uri() se referă întotdeauna la tema activă curentă.
În cazul unei teme personalizate sau al scenariului în care modificați o temă fără o temă secundară, probabil că ați folosi get_template_directory_uri() în loc de get_stylesheet_directory_uri()
Dacă tema copilului nu are deja o funcție pentru a pune în coadă scriptul, va trebui să adăugați una. Utilizați următoarele pentru a pune în coadă fișierul isotope.js .

add_action( 'wp_enqueue_scripts', 'child_scripts');

function child_scripts(){

wp_enqueue_script('isotope', get_stylesheet_directory_uri() . '/js/isotope.pkgd.min.js', array(), '1.0.0', true );

wp_enqueue_script('projects', get_stylesheet_directory_uri() . '/js/projects.js', array(), '1.0.0', true );

}

O ultimă notă aici, ar trebui să vă asigurați că tema dvs. a pus deja în coada jQuery. Dacă nu, va trebui să adăugați wp_enqueue_script('jquery'); dar începând cu WordPress 3.8, jQuery este împachetat cu nucleul WordPress în /wp-includes/js/jquery/jquery.js .

În cele din urmă, salvați fișierul functions.php .

Acum, reveniți la fișierul projects-page.php și adăugați codul care va afișa filtrele dvs., precum și obțineți numărul de categorii și numele categoriei fiecărui proiect.

Lipiți următorul cod chiar mai sus de unde începe portofoliul dvs. La fel ca și ultimul tutorial, folosesc Bootstrap și, în HTML de mai jos, îmi setez rândul de filtru să aibă lățimea completă a containerului. În mod implicit, filtrele mele se vor alinia la stânga coloanei. Dacă nu utilizați Bootstrap, poate doriți să începeți și să încheiați cu etichetele <ul> .

&amp;amp;lt;div id=&quot;filter-row&quot; class=&quot;row&quot;&amp;amp;gt;
&amp;amp;lt;div id=&quot;project-page&quot; class=&quot;col-lg-12&quot;&amp;amp;gt;
		&amp;amp;lt;ul class=&quot;nav navbar-nav navbar-left&quot; id=&quot;filters&quot;&amp;amp;gt;
			&amp;amp;lt;?php
				$terms2 = get_terms(&quot;project_categories&quot;); // This will go get all the categories
				$count = count($terms2); //This counts the number of categories
				echo '&amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;a href=&quot;javascript:void(0)&quot; title=&quot;&quot; data-filter=&quot;.all&quot; class=&quot;active&quot;&amp;amp;gt;Show All&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;';
				if ( $count &amp;amp;gt; 0 ){
				foreach ( $terms2 as $term ) {
												$termname = strtolower($term-&amp;amp;gt;name);								$termname = str_replace(' ', '-', $termname);
	echo '&amp;amp;lt;li style=&quot;list-style:inline;&quot;&amp;amp;gt;&amp;amp;lt;a href=&quot;javascript:void(0)&quot; title=&quot;&quot; class=&quot;&quot; data-filter=&quot;.'.$termname.'&quot;&amp;amp;gt;'.$term-&amp;amp;gt;name.'&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;';
	}
}
// in the above foreach loop, the code will return all the values stored in $terms2 array.

 ?&amp;amp;gt;
		&amp;amp;lt;/ul&amp;amp;gt;
	&amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;

Următorul pas este să obțineți categoria pentru fiecare proiect și să o plasați în containerul de proiect ca o clasă.

&amp;amp;lt;?php
/*
Get the category for each unique post using the post ID
*/
$terms = get_the_terms( $post-&amp;amp;gt;ID, 'project_categories' );
if ( $terms &amp;amp;amp;&amp;amp;amp; ! is_wp_error( $terms ) ) :
$links = array();
	foreach ( $terms as $term ) {
	$links[] = $term-&amp;amp;gt;name;
	}
	$tax_links = join( &quot; &quot;, str_replace(' ', '-', $links));
	$tax = strtolower($tax_links);
	else :
	$tax = '';
	endif;

	$terms = get_the_terms( $post-&amp;amp;gt;ID, 'project_categories' );
?&amp;amp;gt;

&amp;amp;lt;?php echo '&amp;amp;lt;div class=&quot;project col-sm-6 col-md-4 all project-item '. $tax .'&quot;&amp;amp;gt;';?&amp;amp;gt;

În codul de mai sus, all , project-item și $tax sunt adăugate la fiecare container de proiect. $tax va fi categoria pe care i-ați atribuit-o în wp-admin . Adăugarea „toate” vă permite să resetați pagina de portofoliu oricând un utilizator face clic pe filtrul „toate”.

În cele din urmă, fiecare proiect ar trebui să aibă o clasă numită „toate”, iar în cazul meu, fiecare proiect va avea, de asemenea, fie „construcții noi”, fie „renovări”. Acum, atunci când un utilizator dă clic pe una dintre categorii, pagina se va reformata elegant pentru a afișa doar categoria care a fost selectată, totul păstrând aspectul grilei portofoliului.

adauga-filtre-wordpress-portfolio-filtrate

În concluzie, Isotope.js este un plugin jQuery foarte puternic care poate fi implementat pe orice site WordPress. Odată instalat, poate fi folosit pentru a sorta și filtra machetele de catalog, galerie sau portofoliu. În plus, există mai multe opțiuni de aspect pe care le puteți utiliza. Consultați toate opțiunile aici.

În cele din urmă, iată cum arată projects-page.php ul meu când am terminat:

&amp;amp;lt;?php
/* This is my Projects Portfolio page */

get_header(); 

?&amp;amp;gt;
&amp;amp;lt;div id=&quot;content-full-width&quot; class=&quot;page-wrap&quot;&amp;amp;gt;
    &amp;amp;lt;div class=&quot;container content-wrapper&quot;&amp;amp;gt;
        &amp;amp;lt;div class=&quot;row&quot;&amp;amp;gt;
            &amp;amp;lt;div id=&quot;content-projects&quot; class=&quot;page-wrap2&quot;&amp;amp;gt;
	    &amp;amp;lt;div class=&quot;container content-wrapper&quot;&amp;amp;gt;
	&amp;amp;lt;!-- ============ CONTENT START ============ --&amp;amp;gt;
	        &amp;amp;lt;section id=&quot;project-content&quot;&amp;amp;gt;
		&amp;amp;lt;div id=&quot;intro&quot; class=&quot;row&quot;&amp;amp;gt;
		    &amp;amp;lt;div class=&quot;col-sm-12 text-center&quot;&amp;amp;gt;
			&amp;amp;lt;?php while ( have_posts() ) : the_post(); ?&amp;amp;gt;
			&amp;amp;lt;?php the_content() ?&amp;amp;gt;
			&amp;amp;lt;?php endwhile; // end of the loop. ?&amp;amp;gt;
		    &amp;amp;lt;/div&amp;amp;gt;
		&amp;amp;lt;/div&amp;amp;gt;
	            &amp;amp;lt;div id=&quot;filters-row&quot; class=&quot;row&quot;&amp;amp;gt;
		    &amp;amp;lt;div id=&quot;project-page&quot; class=&quot;col-lg-12&quot;&amp;amp;gt;
		        &amp;amp;lt;ul class=&quot;nav navbar-nav navbar-left&quot; id=&quot;filters&quot;&amp;amp;gt;
			&amp;amp;lt;?php
			$terms2 = get_terms(&quot;project_categories&quot;);
			$count = count($terms2);
			echo '&amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;a href=&quot;javascript:void(0)&quot; title=&quot;&quot; data-filter=&quot;.all&quot; class=&quot;active&quot;&amp;amp;gt;All&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;';
			if ( $count &amp;amp;gt; 0 ){
			    foreach ( $terms2 as $term ) {									    $termname = strtolower($term-&amp;amp;gt;name);
			    $termname = str_replace(' ', '-', $termname);
			echo '&amp;amp;lt;li style=&quot;list-style:inline;&quot;&amp;amp;gt;&amp;amp;lt;a href=&quot;javascript:void(0)&quot; title=&quot;&quot; class=&quot;&quot; data-filter=&quot;.'.$termname.'&quot;&amp;amp;gt;'.$term-&amp;amp;gt;name.'&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;';
			}
		} ?&amp;amp;gt;
		    &amp;amp;lt;/ul&amp;amp;gt;
		&amp;amp;lt;/div&amp;amp;gt;
	        &amp;amp;lt;/div&amp;amp;gt;
	    &amp;amp;lt;div id=&quot;projects&quot; class=&quot;row&quot;&amp;amp;gt;
	&amp;amp;lt;!-- Start projects Loop --&amp;amp;gt;
		&amp;amp;lt;?php  /* Query the post   */
	$args = array( 'post_type' =&amp;amp;gt; 'projects', 'posts_per_page' =&amp;amp;gt; -1, 'orderby'=&amp;amp;gt;'menu_order','order'=&amp;amp;gt;'ASC' );
	$loop = new WP_Query( $args );
	while ( $loop-&amp;amp;gt;have_posts() ) : $loop-&amp;amp;gt;the_post();
/* Pull category for each unique post using the ID */
	$terms = get_the_terms( $post-&amp;amp;gt;ID, 'project_categories' );
	if ( $terms &amp;amp;amp;&amp;amp;amp; ! is_wp_error( $terms ) ) :
	   $links = array();
	       foreach ( $terms as $term ) {
	       $links[] = $term-&amp;amp;gt;name;
		}
	       $tax_links = join( &quot; &quot;, str_replace(' ', '-', $links));
	       $tax = strtolower($tax_links);
		else :
		$tax = '';
	endif;
	&amp;amp;lt;?php echo '&amp;amp;lt;div class=&quot;project col-sm-6 col-md-4 all project-item '. $tax .'&quot;&amp;amp;gt;';?&amp;amp;gt;
            &amp;amp;lt;a href=&quot;&amp;amp;lt;?php print get_permalink($post-&amp;amp;gt;ID) ?&amp;amp;gt;&quot;&amp;amp;gt;
              &amp;amp;lt;?php echo the_post_thumbnail(); ?&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;
              &amp;amp;lt;h4&amp;amp;gt;&amp;amp;lt;?php print get_the_title(); ?&amp;amp;gt;&amp;amp;lt;/h4&amp;amp;gt;
              &amp;amp;lt;?php print get_the_excerpt(); ?&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;
              &amp;amp;lt;a class=&quot;btn btn-default&quot; href=&quot;&amp;amp;lt;?php print get_permalink($post-&amp;amp;gt;ID) ?&amp;amp;gt;&quot;&amp;amp;gt;Details&amp;amp;lt;/a&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;!-- End individual project col --&amp;amp;gt;
        &amp;amp;lt;?php endwhile; ?&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;!-- End Projects Row --&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;!-- End Container --&amp;amp;gt;
&amp;amp;lt;!-- ============ CONTENT END ============ --&amp;amp;gt;

&amp;amp;lt;?php get_footer(); ?&amp;amp;gt;

Și cu asta, veți avea o pagină de portofoliu complet funcțională, cu filtrare a conținutului!


Pluginuri WordPress pe care le veți iubi

Descărcați această carte electronică pentru o listă cu cele mai recomandate plugin-uri pentru dezvoltatori! Am descoperit că toate aceste plugin-uri sunt ușor de utilizat, nu sunt prea grele de performanță pe site-ul dvs. și sunt de-a dreptul de încredere.