Bagaimana cara menambahkan filter ke portofolio WordPress Anda

Diterbitkan: 2016-03-21

Bulan lalu, saya menunjukkan cara membuat situs portofolio di WordPress menggunakan jenis posting khusus, kueri "proyek" baru, dan beberapa templat baru.

Dalam posting ini, saya akan menunjukkan cara menambahkan filter ke halaman portofolio Anda menggunakan perpustakaan Isotop.js.

tambahkan-filter-wordpress-portfolio-all

Jika Anda belum melakukannya, masuk ke situs WordPress Anda, buat beberapa kategori, dan tetapkan ke item dalam portofolio Anda. Jika Anda membaca artikel pertama, saya menggunakan CPT yang disebut 'Proyek' lagi, jadi untuk setiap proyek yang ditambahkan ke situs WordPress saya, saya perlu memastikan bahwa sebuah kategori telah ditetapkan. Di situs saya, proyek saya akan dikategorikan sebagai "Konstruksi Baru" atau "Renovasi."

Setelah Anda menetapkan kategori untuk setiap proyek Anda, sekarang saatnya untuk menambahkan JavaScript yang akan melakukan pekerjaan penyaringan untuk Anda.

Isotop.js adalah pustaka tata letak yang dikembangkan oleh David DeSandro. Ini gratis untuk penggunaan sumber terbuka dan pribadi, namun, untuk penggunaan komersial, Anda harus membeli lisensi. Harap tinjau halaman lisensi untuk informasi lebih lanjut dan harga.

Jadi, mari tambahkan file isotope.js ke situs Anda. Idealnya, Anda akan menambahkan ini ke direktori bernama /js/ di tema anak Anda untuk memastikan bahwa pembaruan tidak pernah menghapusnya.

Anda juga perlu membuat satu file lagi dan menambahkannya ke direktori /js/ Anda. File ini akan berisi jQuery yang diperlukan untuk menargetkan proyek Anda. Dalam contoh saya, saya menamai file ini projects.js .

Rekatkan kode berikut ke dalam file itu dan simpan. Hal utama yang perlu diperhatikan dalam file ini adalah #projects , .project-item , dan #filters . Ini adalah file tempat Anda juga dapat mengubah layoutMode: menjadi masonry, packery, cellsByColumn, dan banyak lagi. Dalam tutorial ini, saya menggunakan mode grid.

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;

});

});

Setelah Anda menambahkan kode ini ke situs Anda, sekarang saatnya untuk mengantrekan file. Jika functions.php tema anak Anda sudah memiliki fungsi yang dideklarasikan untuk melakukan ini, Anda hanya perlu menambahkan sebaris kode ke dalamnya seperti di bawah ini.

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 );

Catatan, get_stylesheet_directory_uri() selalu mengacu pada tema aktif saat ini.
Dalam kasus tema khusus, atau skenario di mana Anda mengubah tema tanpa tema anak, Anda mungkin akan menggunakan get_template_directory_uri() sebagai ganti get_stylesheet_directory_uri()
Jika tema anak Anda belum memiliki fungsi untuk mengantrekan skrip Anda, Anda perlu menambahkannya. Gunakan yang berikut ini untuk mengantrekan file isotope.js Anda.

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 );

}

Satu catatan terakhir di sini, Anda harus memastikan bahwa tema Anda telah memasukkan jQuery. Jika belum, Anda perlu menambahkan wp_enqueue_script('jquery'); tetapi pada WordPress 3.8, jQuery dikemas dengan inti WordPress di /wp-includes/js/jquery/jquery.js .

Terakhir, simpan file functions.php Anda.

Sekarang, kembali ke file projects-page.php Anda dan tambahkan kode yang akan menampilkan filter Anda, serta dapatkan jumlah kategori dan nama kategori setiap proyek.

Tempelkan kode berikut tepat di atas tempat portofolio Anda dimulai. Seperti tutorial terakhir, saya menggunakan Bootstrap dan dalam HTML di bawah ini, saya mengatur baris filter saya menjadi lebar penuh wadah. Secara default, filter saya akan sejajar di sebelah kiri kolom. Jika Anda tidak menggunakan Bootstrap, Anda mungkin ingin memulai dan mengakhiri dengan tag <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;

Langkah selanjutnya adalah mendapatkan kategori untuk setiap proyek dan menempatkannya ke dalam wadah proyek sebagai kelas.

&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;

Dalam kode di atas, all , project-item , dan $tax ditambahkan ke setiap wadah proyek. $tax akan menjadi kategori yang Anda tetapkan di wp-admin . Menambahkan "semua" memungkinkan Anda untuk mengatur ulang halaman portofolio setiap kali pengguna mengklik filter "semua".

Pada akhirnya, setiap proyek harus memiliki kelas yang disebut "semua" dan dalam kasus saya, setiap proyek juga akan memiliki "konstruksi baru" atau "renovasi." Sekarang, ketika pengguna mengklik salah satu kategori, halaman akan diformat ulang secara elegan untuk menampilkan hanya kategori yang telah dipilih, sambil mempertahankan tata letak kisi portofolio.

add-filters-wordpress-portfolio-filtered

Kesimpulannya, Isotop.js adalah plugin jQuery yang sangat kuat yang dapat diimplementasikan di situs WordPress mana pun. Setelah diinstal, dapat digunakan untuk mengurutkan dan memfilter katalog, galeri, atau tata letak portofolio. Selain itu, ada beberapa opsi tata letak yang dapat Anda gunakan. Lihat semua opsi di sini.

Pada akhirnya, inilah tampilan projects-page.php saya setelah selesai:

&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;

Dan dengan itu, Anda akan memiliki halaman portofolio pemfilteran konten yang berfungsi penuh!


Plugin WordPress yang akan Anda sukai

Unduh ebook ini untuk daftar plugin yang paling direkomendasikan untuk pengembang! Kami menemukan semua plugin ini mudah digunakan, tidak terlalu berat kinerjanya di situs Anda, dan benar-benar andal.