Menambahkan Empat Area Widget Footer Secara Dinamis
() translation by (you can also view the original English article)
Hari-hari ini, banyak tema WordPress memiliki sejumlah area widget di footer, yang berarti Anda dapat membuat "footer gemuk" dengan beberapa area widget berdampingan. Ini adalah sesuatu yang saya gunakan di semua tema saya.
Tetapi bagaimana jika tema Anda memiliki empat area widget tetapi Anda hanya ingin tiga widget? Jika Anda tidak berhati-hati, Anda akan berakhir dengan celah jelek di sisi kanan tempat area widget keempat kosong.
Dalam tutorial ini saya akan menunjukkan kepada Anda bagaimana menghindari ini menggunakan kombinasi tag kondisional dalam PHP dan beberapa Object-Oriented CSS (OOCSS), yang akan memeriksa berapa banyak area widget yang telah Anda isi dan secara otomatis mengubah ukurannya sehingga masing-masing mengambil proporsi yang tepat dari lebar halaman.
Apa yang Akan Anda Butuhkan
Untuk mengikuti tutorial ini, Anda akan membutuhkan:
- instalasi pengembangan WordPress
- tema Anda sendiri yang akan Anda tambahkan kodenya
- sebuah editor kode
Mendaftarkan Area Widget
Langkah pertama adalah mendaftarkan empat area widget untuk footer Anda. Jika Anda belum memiliki area widget terdaftar, Anda harus menambahkan kode ini ke file functions.php
Anda:
1 |
function tutsplus_widgets_init() { |
2 |
|
3 |
// First footer widget area, located in the footer. Empty by default.
|
4 |
register_sidebar( array( |
5 |
'name' => __( 'First Footer Widget Area', 'tutsplus' ), |
6 |
'id' => 'first-footer-widget-area', |
7 |
'description' => __( 'The first footer widget area', 'tutsplus' ), |
8 |
'before_widget' => '<div id="%1$s" class="widget-container %2$s">', |
9 |
'after_widget' => '</div>', |
10 |
'before_title' => '<h3 class="widget-title">', |
11 |
'after_title' => '</h3>', |
12 |
) ); |
13 |
|
14 |
// Second Footer Widget Area, located in the footer. Empty by default.
|
15 |
register_sidebar( array( |
16 |
'name' => __( 'Second Footer Widget Area', 'tutsplus' ), |
17 |
'id' => 'second-footer-widget-area', |
18 |
'description' => __( 'The second footer widget area', 'tutsplus' ), |
19 |
'before_widget' => '<div id="%1$s" class="widget-container %2$s">', |
20 |
'after_widget' => '</div>', |
21 |
'before_title' => '<h3 class="widget-title">', |
22 |
'after_title' => '</h3>', |
23 |
) ); |
24 |
|
25 |
// Third Footer Widget Area, located in the footer. Empty by default.
|
26 |
register_sidebar( array( |
27 |
'name' => __( 'Third Footer Widget Area', 'tutsplus' ), |
28 |
'id' => 'third-footer-widget-area', |
29 |
'description' => __( 'The third footer widget area', 'tutsplus' ), |
30 |
'before_widget' => '<div id="%1$s" class="widget-container %2$s">', |
31 |
'after_widget' => '</div>', |
32 |
'before_title' => '<h3 class="widget-title">', |
33 |
'after_title' => '</h3>', |
34 |
) ); |
35 |
|
36 |
// Fourth Footer Widget Area, located in the footer. Empty by default.
|
37 |
register_sidebar( array( |
38 |
'name' => __( 'Fourth Footer Widget Area', 'tutsplus' ), |
39 |
'id' => 'fourth-footer-widget-area', |
40 |
'description' => __( 'The fourth footer widget area', 'tutsplus' ), |
41 |
'before_widget' => '<div id="%1$s" class="widget-container %2$s">', |
42 |
'after_widget' => '</div>', |
43 |
'before_title' => '<h3 class="widget-title">', |
44 |
'after_title' => '</h3>', |
45 |
) ); |
46 |
|
47 |
}
|
48 |
|
49 |
// Register sidebars by running tutsplus_widgets_init() on the widgets_init hook.
|
50 |
add_action( 'widgets_init', 'tutsplus_widgets_init' ); |
Ini akan menambahkan empat area widget footer ke tema Anda. Jika Anda melihat layar Widgets, Anda akan melihat semuanya di sana, bersama dengan yang lain yang sudah Anda daftarkan:



Menambahkan Area Widget ke Tema Anda
Jika Anda menambahkan widget ke area widget tersebut sekarang, tidak akan ada yang terjadi. Anda perlu menambahkannya ke footer tema Anda. Saya akan bekerja melalui kode yang perlu Anda tambahkan ke file footer Anda secara bertahap, menambahkan lebih banyak pemeriksaan untuk berbagai jumlah area widget yang terisi saat kita berjalan.
Perhatikan bahwa Anda mungkin perlu mengubah beberapa kelas dan elemen yang berisi kode area widget sesuai dengan struktur dan tata letak tema Anda.
1. Memeriksa Apakah Tidak Ada Area Widget yang Diisi
Langkah pertama adalah memeriksa apakah tidak ada area widget yang diisi, yang mana tidak ada yang harus ditampilkan. Buka file footer.php
tema Anda dan tambahkan kode di bawah ini.
1 |
<footer>
|
2 |
|
3 |
<?php
|
4 |
/* The footer widget area is triggered if any of the areas
|
5 |
* have widgets. So let's check that first.
|
6 |
*
|
7 |
* If none of the sidebars have widgets, then let's bail early.
|
8 |
*/
|
9 |
if ( ! is_active_sidebar( 'first-footer-widget-area' ) |
10 |
&& ! is_active_sidebar( 'second-footer-widget-area' ) |
11 |
&& ! is_active_sidebar( 'third-footer-widget-area' ) |
12 |
&& ! is_active_sidebar( 'fourth-footer-widget-area' ) |
13 |
)
|
14 |
return; |
15 |
|
16 |
//end of all sidebar checks.
|
17 |
endif;?> |
18 |
|
19 |
</footer>
|
2. Memeriksa apakah Semua Area Widget Diisi
Selanjutnya, saya akan memeriksa apakah semua area widget sudah diisi. Jika ini kasusnya, tema akan menampilkan isi dari keempatnya, dengan masing-masing float di samping satu sama lain dan mengambil seperempat lebar layar. Saya akan menambahkan kelas untuk ini di sini, tetapi menambahkan CSS ke stylesheet saya nanti.
Setelah pembacaan baris return;
tetapi sebelum endif;
pernyataan dalam kode yang baru saja Anda tambahkan, tambahkan ini:
1 |
if ( is_active_sidebar( 'first-footer-widget-area' ) |
2 |
&& is_active_sidebar( 'second-footer-widget-area' )
|
3 |
&& is_active_sidebar( 'third-footer-widget-area' )
|
4 |
&& is_active_sidebar( 'fourth-footer-widget-area' )
|
5 |
) : ?> |
6 |
|
7 |
<aside class="fatfooter" role="complementary"> |
8 |
<div class="first quarter left widget-area"> |
9 |
<?php dynamic_sidebar( 'first-footer-widget-area' ); ?>
|
10 |
</div><!-- .first .widget-area --> |
11 |
|
12 |
<div class="second quarter widget-area"> |
13 |
<?php dynamic_sidebar( 'second-footer-widget-area' ); ?>
|
14 |
</div><!-- .second .widget-area --> |
15 |
|
16 |
<div class="third quarter widget-area"> |
17 |
<?php dynamic_sidebar( 'third-footer-widget-area' ); ?>
|
18 |
</div><!-- .third .widget-area --> |
19 |
|
20 |
<div class="fourth quarter right widget-area"> |
21 |
<?php dynamic_sidebar( 'fourth-footer-widget-area' ); ?> |
22 |
</div><!-- .fourth .widget-area --> |
23 |
</aside><!-- #fatfooter --> |
Ini melakukan hal berikut:
- Memeriksa bahwa semua area widget footer diisi menggunakan tag
if
. - Jika demikian, buka elemen baru yang disebut
<aside class = "fatfooter">
. Elemen tambahan ini yang berisi area widget memungkinkan seluruh footer untuk berpusat pada halaman bahkan jika footer itu sendiri tidak (misalnya jika keseluruhan footer memiliki latar belakang yang lebar). - Tampilkan keempat area widget menggunakan fungsi
dynamic_sidebar()
, memberikan masing-masing ini kelas untuk tata letak.
Kelas-kelasnya adalah .left.quarter
untuk sebagian besar area widget, kecuali yang terakhir yang memiliki .right.quarter
.
3. Memeriksa Apakah Hanya Tiga Area Widget yang Diisi
Langkah selanjutnya adalah menambahkan kode untuk menampilkan area widget jika hanya tiga dari mereka yang diisi. Di bawah kode yang baru saja Anda tambahkan, masukkan yang berikut:
1 |
<?php
|
2 |
elseif ( is_active_sidebar( 'first-footer-widget-area' ) |
3 |
&& is_active_sidebar( 'second-footer-widget-area' ) |
4 |
&& is_active_sidebar( 'third-footer-widget-area' ) |
5 |
&& ! is_active_sidebar( 'fourth-footer-widget-area' ) |
6 |
) : ?> |
7 |
<aside class="fatfooter" role="complementary"> |
8 |
<div class="first one-third left widget-area"> |
9 |
<?php dynamic_sidebar( 'first-footer-widget-area' ); ?> |
10 |
</div><!-- .first .widget-area --> |
11 |
|
12 |
<div class="second one-third widget-area"> |
13 |
<?php dynamic_sidebar( 'second-footer-widget-area' ); ?> |
14 |
</div><!-- .second .widget-area --> |
15 |
|
16 |
<div class="third one-third right widget-area"> |
17 |
<?php dynamic_sidebar( 'third-footer-widget-area' ); ?> |
18 |
</div><!-- .third .widget-area --> |
19 |
|
20 |
</aside><!-- #fatfooter --> |
Ini memeriksa apakah tiga area widget pertama diisi dan yang keempat tidak, dan kemudian menampilkan tiga yang pertama menggunakan kelas yang sesuai—menggantikan .quarter
dengan .one-third
.
Perhatikan bahwa ketika Anda mengisi area widget Anda, Anda selalu perlu kehilangan yang terakhir jika Anda tidak ingin menggunakannya semuanya, atau pemeriksaan ini tidak akan berfungsi. Jangan biarkan yang pertama kosong dan mengisi yang kemudian.
4. Memeriksa Apakah Hanya Dua Area Widget yang Diisi
Untuk menghasilkan hanya dua area widget jika sudah diisi dan yang ketiga dan keempat belum, tambahkan kode ini di bawah kode yang baru saja Anda tambahkan:
1 |
<?php
|
2 |
elseif ( is_active_sidebar( 'first-footer-widget-area' ) |
3 |
&& is_active_sidebar( 'second-footer-widget-area' ) |
4 |
&& ! is_active_sidebar( 'third-footer-widget-area' ) |
5 |
&& ! is_active_sidebar( 'fourth-footer-widget-area' ) |
6 |
) : ?> |
7 |
<aside class="fatfooter" role="complementary"> |
8 |
<div class="first half left widget-area"> |
9 |
<?php dynamic_sidebar( 'first-footer-widget-area' ); ?> |
10 |
</div><!-- .first .widget-area --> |
11 |
|
12 |
<div class="second half right widget-area"> |
13 |
<?php dynamic_sidebar( 'second-footer-widget-area' ); ?> |
14 |
</div><!-- .second .widget-area --> |
15 |
|
16 |
</aside><!-- #fatfooter --> |
Ini bekerja dengan cara yang mirip dengan dua cuplikan kode sebelumnya, menggunakan kelas .half
untuk tata letak.
5. Memeriksa apakah Hanya Satu Area Widget yang Diisi
Pemeriksaan terakhir hanya untuk area widget pertama yang diisi. Tambahkan ini di bawah kode yang baru saja Anda tambahkan:
1 |
<?php
|
2 |
elseif ( is_active_sidebar( 'first-footer-widget-area' ) |
3 |
&& ! is_active_sidebar( 'second-footer-widget-area' ) |
4 |
&& ! is_active_sidebar( 'third-footer-widget-area' ) |
5 |
&& ! is_active_sidebar( 'fourth-footer-widget-area' ) |
6 |
) : |
7 |
?>
|
8 |
<aside class="fatfooter" role="complementary"> |
9 |
<div class="first full-width widget-area"> |
10 |
<?php dynamic_sidebar( 'first-footer-widget-area' ); ?> |
11 |
</div><!-- .first .widget-area --> |
12 |
|
13 |
</aside><!-- #fatfooter --> |
Ini akan menampilkan satu konten area widget dalam elemen full-width.
Sekarang simpan file footer.php
Anda.
Menambahkan CSS
Saat ini area widget Anda tidak akan berfungsi dengan benar—pada kenyataannya, jika Anda mengisi semuanya, mereka akan muncul satu di bawah yang lain dengan lebar penuh. Jadi Anda perlu menambahkan beberapa OOCSS untuk membuat kelas tata letak tersebut berfungsi. OOCSS yang saya tambahkan responsif, jadi saya telah menyertakan media queries untuk mengubah ukuran area widget footer di layar kecil.
1. Menambahkan Floats
Pertama mari kita pastikan area widget float berdampingan.
Buka file style.css
tema Anda dan tambahkan kode ini:
1 |
/* floats */
|
2 |
.quarter, |
3 |
.one-third, |
4 |
.two-thirds, |
5 |
.half { |
6 |
float: left; |
7 |
}
|
2. Menambahkan Lebar
Lebar akan memastikan bahwa semua area widget mengambil proporsi yang benar dari layar. Saya menggunakan persentase karena membuat kode lebih fleksibel dan responsif. Tambahkan ini ke stylesheet Anda:
1 |
/* widths */
|
2 |
.one-third { |
3 |
width: 32%; |
4 |
}
|
5 |
.two-thirds { |
6 |
width: 65.5%; |
7 |
}
|
8 |
.quarter { |
9 |
width: 23.5%; |
10 |
}
|
11 |
.three-quarters { |
12 |
width: 74.5%; |
13 |
}
|
14 |
.half { |
15 |
width: 48%; |
16 |
}
|
Perhatikan bahwa lebar tidak menambahkan hingga 100% karena ruang perlu diizinkan untuk margin.
3. Menambahkan Margin
Sekarang tambahkan penataan untuk margin ke stylesheet Anda:
1 |
/* margins */
|
2 |
.one-third { |
3 |
margin: 0 0.5%; |
4 |
}
|
5 |
.quarter, |
6 |
.two-thirds { |
7 |
margin: 0 0.5%; |
8 |
}
|
9 |
.left, |
10 |
.quarter.left, |
11 |
.one-third.left { |
12 |
margin: 0 1% 0 0; |
13 |
float: left; |
14 |
}
|
15 |
.right, |
16 |
.quarter.right, |
17 |
.one-third.right { |
18 |
margin: 0 0 0 1%; |
19 |
float: right; |
20 |
}
|
21 |
.half.left { |
22 |
width: 48%; |
23 |
margin: 0 2% 0 0; |
24 |
}
|
25 |
.half.right { |
26 |
width: 48%; |
27 |
margin: 0 0 0 2%; |
28 |
}
|
29 |
.two-thirds.left { |
30 |
margin: 0 1% 0 0; |
31 |
}
|
32 |
.two-thirds.right { |
33 |
margin: 0 0 0 1%; |
34 |
float: right; |
35 |
}
|
Perhatikan bahwa margin berbeda untuk elemen yang juga memiliki kelas .right
atau .left
yang diterapkan pada mereka, sehingga mereka duduk rata di tepi elemen yang mengandungnya.
4. Menambahkan Media Queries
Media queries akan melakukan dua hal:
- Pada layar kecil seperti tablet, empat elemen akan muncul dalam grid dua kali dua, yang berarti bahwa elemen dengan kelas
.quarter
akan memiliki setengah lebar dan margin akan disesuaikan. - Pada layar yang sangat kecil seperti smartphone, semua elemen akan memiliki lebar penuh.
Tambahkan media queries di bagian bawah stylesheet Anda bersama dengan media queries lainnya yang mungkin Anda miliki:
1 |
/* media queries for larger screens such as small tablets in landscape or large tablets in portrait */
|
2 |
@media screen and ( max-width: 780px ) { |
3 |
|
4 |
/* only the .quarter layout class is relevant here - all other classes will have full width */
|
5 |
.quarter { |
6 |
width: 48%; |
7 |
}
|
8 |
.quarter.left { |
9 |
margin-right: 2%; |
10 |
}
|
11 |
.quarter.right { |
12 |
margin-left: 2%; |
13 |
}
|
14 |
footer .third.quarter.widget-area { |
15 |
clear: both; |
16 |
}
|
17 |
}
|
18 |
|
19 |
/* media queries for small screens in landscape mode (or similar) */
|
20 |
@media screen and ( max-width: 600px ) { |
21 |
|
22 |
/* width sizing all full width in small screens */
|
23 |
.quarter, |
24 |
.one-third, |
25 |
.half, |
26 |
.two-thirds, |
27 |
.three-quarters, |
28 |
.full-width { |
29 |
width: 100%; |
30 |
margin: 0; |
31 |
}
|
32 |
/* padding adjustments */
|
33 |
.widget-area { |
34 |
padding: 0 0 10px 0; |
35 |
}
|
36 |
}
|
Sekarang simpan stylesheet Anda.
Menguji Kode Anda
Sekarang saatnya untuk melihat apa yang terjadi ketika Anda mengisi area widget Anda.
Di bawah ini adalah tangkapan layar dari situs yang saya kelola yang menggunakan kode ini. Biasanya footer memiliki empat area widget:



Jika saya menghapus widget dari area widget keempat, hanya tiga yang ditampilkan, dengan lebar yang sama:



Dan jika saya menghapus widget dari area widget ketiga, pengunjung akan melihat dua area widget masing-masing mengambil setengah dari lebar:



Ringkasan
Teknik ini berguna jika Anda ingin tema Anda untuk memungkinkan berisi beberapa area widget footer tetapi Anda tidak tahu berapa banyak dari area widget yang benar-benar akan digunakan.
Jika Anda membuat sebuah kerangka kerja, tema starter, atau tema yang akan digunakan orang lain untuk situs mereka, itu dapat membantu membuat tata letak footer lebih rapi dan menghemat pekerjaan ekstra pada baris yang menambahkan tata letak CSS.