Thứ Bảy, 3 tháng 10, 2015
Nghi phạm đánh bom liên hoàn ở Trung Quốc đã chết
12 themes WordPress miễn phí tháng 9/2015 test
Đầu tiên mình xin gửi lời xin lỗi đến các độc giả do một tháng vừa qua mình không hề viết bài vì lo một số việc cá nhân cũng như chuẩn bị một số dự định mới cho thachpham.com. Nên mình hy vọng rằng điều đó không gây trở ngại nhiều đến việc theo dõi bài viết của các độc giả.
Sẵn dịp đây là đầu tháng, mình xin trở lại với bài viết trong loạt bài giới thiệu theme miễn phí tốt nhất mỗi tháng mà mình đã làm suốt hơn 3 năm phát triển thachpham.com. Cũng phải nói thêm rằng trong tháng vừa qua là lúc có khá nhiều theme có kiểu thiết kế đơn giản ra đời nên nếu bạn thích các theme như vậy thì quá tuyệt vời cho bạn, hãy cùng xem nhé.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\libre-wordpress-theme.png)
Libre là một theme mới đặc trưng cho những người yêu thích trường phái chuộng nghệ thuật Typography. Với đặc trưng là giao diện thể hiện bài viết nên nó sẽ không có tác dụng làm website gì khác ngoài một blog cá nhân (các theme của wordpress.com vốn là thế mà).
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\evision-corporate-theme.png)
Như cái tên của nó – eVision Corporate là một theme kiểu one-page mô tả dành cho các doanh nghiệp cần một giao diện landing page để giới thiệu dịch vụ của họ. Tuy theme này là miễn phí nhưng nó bao gồm rất nhiều chức năng cần thiết như portfolio, testimonial, khung hiển thị dịch vụ,….
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\quality-theme.png)
Quality gồm có hai phiên bản miễn phí và trả phí, dĩ nhiên là chức năng của bản trả phí sẽ nhiều và chuyên nghiệp hơn nhưng các bạn có thể xem link demo ở trên, đó là phiên bản miễn phí và đầy đủ các chức năng cần thiết cho một trang giới thiệu dịch vụ. Nếu bạn cần một màu sắc khác cho theme này, bạn có thể cài theme Quality Blue để thay màu hồng đỏ đặc trưng thành màu xanh dương nhé.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\zincy-lite-theme.png)
Thêm một lựa chọn khác cho giao diện làm website doanh nghiệp. Zincy Lite là phiên bản trả phí nhưng tất cả những gì bạn thấy trong demo là phiên bản trả phí nên không cần lo ngại là bị giới hạn chức năng khi cài vào. Đặc điểm nổi bật của theme này là hiển thị các thông tin với hiệu ứng và trang trí rất bắt mắt, phần portfolio tuyệt đẹp và hỗ trợ nhiều định dạng layout khác nhau.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\luna-wordpress-theme.jpg)
Luna là một theme dành cho blog và các trang tạp chí mình rất thích trong các theme miễn phí tháng này. Chức năng của nó thì không có gì ngoài việc hiển thị bài viết theo dạng lưới ngoài trang chủ, còn các trang category thì hiển thị với dạng danh sách nên nó khá nhẹ nhưng như thế có vẻ là đủ cho một blog rồi.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\skrollr-theme.jpg)
Đây là một theme khá độc đáo về lẫn giao diện và tính năng. Kiểu hiển thị của theme này rất phù hợp cho các website giới thiệu sự kiện hoặc hình ảnh vì nó sẽ hiển thị một ảnh to theo mỗi phần kèm theo chú thích. Mặc dù theme có vẻ hơi nặng để tải do sử dụng nhiều ảnh kích thước lớn nhưng dù sao nó vẫn đáng để sử dụng nếu bạn thật sự cần.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\canyon-theme.jpg)
Nhìn ảnh thì có vẻ nó là một theme doanh nghiệp nhưng thực chất đây là một theme dành cho blog nhưng nó có thêm phần header khá bắt mắt và 3 cột nội dung giới thiệu để bạn có thể viết những ghi chú trên đó. Còn lại nó giống như một theme blog thông thường với thiết kế phẳng.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\publication.jpg)
Publication là một theme blog đặc trưng đến từ WordPress.com với giao diện có thể là không còn gì tuyệt vời hơn cho một theme miễn phí. Đặc biệt theme này sẽ rất phù hợp với các blog về hình ảnh, du lịch vì nó hiển thị ảnh đại diện kích thước khá to khi vào xem bài viết và có thể gọi là điểm nổi bật khi xem bài.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\cerauno-theme.jpg)
Nếu bạn mong muốn tìm một giao diện cho blog của mình với kiểu thiết kế trải dài toàn trang, hỗ trợ nhiều cột sidebar thì theme này có thể dành cho bạn.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\canard-theme.jpg)
Lại thêm một theme blog đơn giản nữa đến từ Automattic, nếu nói sự khác biệt thì mình chỉ thấy điều khác biệt duy nhất nằm ở cái mục hiển thị bài nổi bật trên trang chủ, các phần khác thì giống như kiểu giao diện blog thông thường.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\auberge-theme.jpg)
Đây là theme được ra mắt tháng 8/2015 nhưng mình đã quên giới thiệu nó thì thật là uổng phí. Auberge là một theme miễn phí dành cho các nhà hàng, quán cafe được dùng để đăng catalog giới thiệu sản phẩm của mình cho thực khách tham khảo, tuy đơn giản thôi nhưng chức năng cần như thế là quá đủ.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\twenty-sixteen-theme.jpg)
Đây là một theme mặc định mới mà tương lai Automattic sẽ sử dụng nó cho các phiên bản WordPress tiếp theo. So với theme Twenty Fiffteen tiền nhiệm thì Twenty Sixteen có cách thiết kế phức tạp hơn một chút về bố cục nhưng màu sắc vẫn giữ tông đơn giản trắng đen. Hiện tại ngay bây giờ bạn đã có thể cài và sử dụng nó.
Đó là những theme WordPress miễn phí đẹp mà mình cho rằng đẹp nhất được ra mắt trong tháng vừa qua. Mặc dù không phải là tất cả nhưng mình cũng hy vọng với các theme này thì các bạn có thể tìm ra được cho mình một theme miễn phí đúng nghĩa phù hợp với nhu cầu của mình.
.12 themes WordPress miễn phí tháng 9/2015 edit
Đầu tiên mình xin gửi lời xin lỗi đến các độc giả do một tháng vừa qua mình không hề viết bài vì lo một số việc cá nhân cũng như chuẩn bị một số dự định mới cho thachpham.com. Nên mình hy vọng rằng điều đó không gây trở ngại nhiều đến việc theo dõi bài viết của các độc giả.
Sẵn dịp đây là đầu tháng, mình xin trở lại với bài viết trong loạt bài giới thiệu theme miễn phí tốt nhất mỗi tháng mà mình đã làm suốt hơn 3 năm phát triển thachpham.com. Cũng phải nói thêm rằng trong tháng vừa qua là lúc có khá nhiều theme có kiểu thiết kế đơn giản ra đời nên nếu bạn thích các theme như vậy thì quá tuyệt vời cho bạn, hãy cùng xem nhé.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\libre-wordpress-theme.png)
Libre là một theme mới đặc trưng cho những người yêu thích trường phái chuộng nghệ thuật Typography. Với đặc trưng là giao diện thể hiện bài viết nên nó sẽ không có tác dụng làm website gì khác ngoài một blog cá nhân (các theme của wordpress.com vốn là thế mà).
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\evision-corporate-theme.png)
Như cái tên của nó – eVision Corporate là một theme kiểu one-page mô tả dành cho các doanh nghiệp cần một giao diện landing page để giới thiệu dịch vụ của họ. Tuy theme này là miễn phí nhưng nó bao gồm rất nhiều chức năng cần thiết như portfolio, testimonial, khung hiển thị dịch vụ,….
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\quality-theme.png)
Quality gồm có hai phiên bản miễn phí và trả phí, dĩ nhiên là chức năng của bản trả phí sẽ nhiều và chuyên nghiệp hơn nhưng các bạn có thể xem link demo ở trên, đó là phiên bản miễn phí và đầy đủ các chức năng cần thiết cho một trang giới thiệu dịch vụ. Nếu bạn cần một màu sắc khác cho theme này, bạn có thể cài theme Quality Blue để thay màu hồng đỏ đặc trưng thành màu xanh dương nhé.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\zincy-lite-theme.png)
Thêm một lựa chọn khác cho giao diện làm website doanh nghiệp. Zincy Lite là phiên bản trả phí nhưng tất cả những gì bạn thấy trong demo là phiên bản trả phí nên không cần lo ngại là bị giới hạn chức năng khi cài vào. Đặc điểm nổi bật của theme này là hiển thị các thông tin với hiệu ứng và trang trí rất bắt mắt, phần portfolio tuyệt đẹp và hỗ trợ nhiều định dạng layout khác nhau.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\luna-wordpress-theme.jpg)
Luna là một theme dành cho blog và các trang tạp chí mình rất thích trong các theme miễn phí tháng này. Chức năng của nó thì không có gì ngoài việc hiển thị bài viết theo dạng lưới ngoài trang chủ, còn các trang category thì hiển thị với dạng danh sách nên nó khá nhẹ nhưng như thế có vẻ là đủ cho một blog rồi.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\skrollr-theme.jpg)
Đây là một theme khá độc đáo về lẫn giao diện và tính năng. Kiểu hiển thị của theme này rất phù hợp cho các website giới thiệu sự kiện hoặc hình ảnh vì nó sẽ hiển thị một ảnh to theo mỗi phần kèm theo chú thích. Mặc dù theme có vẻ hơi nặng để tải do sử dụng nhiều ảnh kích thước lớn nhưng dù sao nó vẫn đáng để sử dụng nếu bạn thật sự cần.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\canyon-theme.jpg)
Nhìn ảnh thì có vẻ nó là một theme doanh nghiệp nhưng thực chất đây là một theme dành cho blog nhưng nó có thêm phần header khá bắt mắt và 3 cột nội dung giới thiệu để bạn có thể viết những ghi chú trên đó. Còn lại nó giống như một theme blog thông thường với thiết kế phẳng.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\publication.jpg)
Publication là một theme blog đặc trưng đến từ WordPress.com với giao diện có thể là không còn gì tuyệt vời hơn cho một theme miễn phí. Đặc biệt theme này sẽ rất phù hợp với các blog về hình ảnh, du lịch vì nó hiển thị ảnh đại diện kích thước khá to khi vào xem bài viết và có thể gọi là điểm nổi bật khi xem bài.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\cerauno-theme.jpg)
Nếu bạn mong muốn tìm một giao diện cho blog của mình với kiểu thiết kế trải dài toàn trang, hỗ trợ nhiều cột sidebar thì theme này có thể dành cho bạn.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\canard-theme.jpg)
Lại thêm một theme blog đơn giản nữa đến từ Automattic, nếu nói sự khác biệt thì mình chỉ thấy điều khác biệt duy nhất nằm ở cái mục hiển thị bài nổi bật trên trang chủ, các phần khác thì giống như kiểu giao diện blog thông thường.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\auberge-theme.jpg)
Đây là theme được ra mắt tháng 8/2015 nhưng mình đã quên giới thiệu nó thì thật là uổng phí. Auberge là một theme miễn phí dành cho các nhà hàng, quán cafe được dùng để đăng catalog giới thiệu sản phẩm của mình cho thực khách tham khảo, tuy đơn giản thôi nhưng chức năng cần như thế là quá đủ.
\CartyStudios Corporation\Auto Blogging Software\data\Demo Autoblog samurai translate\tp\12themesWordPressmienphithang9/2015\twenty-sixteen-theme.jpg)
Đây là một theme mặc định mới mà tương lai Automattic sẽ sử dụng nó cho các phiên bản WordPress tiếp theo. So với theme Twenty Fiffteen tiền nhiệm thì Twenty Sixteen có cách thiết kế phức tạp hơn một chút về bố cục nhưng màu sắc vẫn giữ tông đơn giản trắng đen. Hiện tại ngay bây giờ bạn đã có thể cài và sử dụng nó.
Đó là những theme WordPress miễn phí đẹp mà mình cho rằng đẹp nhất được ra mắt trong tháng vừa qua. Mặc dù không phải là tất cả nhưng mình cũng hy vọng với các theme này thì các bạn có thể tìm ra được cho mình một theme miễn phí đúng nghĩa phù hợp với nhu cầu của mình.
.Phát hiện hàng loạt sai phạm tại dự án đường sắt Cát Linh-Hà Đông
[Woocommerce] Sửa lỗi không thêm hàng vào giỏ cho ngôn ngữ tiếng Việt
Trong lần cập nhật phiên bản của Woocommerce mới đây, mình thấy rất nhiều bạn đăng câu hỏi lên hoidap.thachpham.com về lỗi không thể thêm hàng vào giỏ nếu bật tính năng tự chuyển về trang giỏ hàng khi dùng ngôn ngữ tiếng Việt.
Sau nhiều lần tìm kiếm giải pháp thì mình cũng đã được WooThemes trả lời và chỉ ra điểm bị lỗi tại đây.
Như tác giả trả lời, vấn đề xảy ra với chuỗi ký tự “%s has been added to your cart” được dịch sang tiếng Việt. Và khi có ký tự tiếng Việt vào đây thì nó đã vô tình xung đột với tính năng loại bỏ các ký tự đặc biệt bên trong code này. Vả lại, cũng do lỗi dịch thuật là họ thiếu chữ s trong cặp ký tự %s.
Do vậy, trong khi chờ đợi Woocommerce ra bản vá lỗi thì nếu bạn muốn sửa lỗi này đi thì chỉ đơn giản là sửa lại chuỗi tiếng Việt của từ đó mà thôi.
Cách làm là bạn cài plugin Loco Translate vào. Sau đó vào Loco Translate -> Manage translations và tìm đến ngôn ngữ tiếng Việt của Woocommerce.
Sau đó tìm chuỗi “added to your cart” rồi chọn chuỗi “%s has been added to your cart” và sửa thành “%s đã được thêm vào giỏ hàng”
Cuối cùng là ấn nút Save ở phía trên và hoàn tất.
Chúc bạn thành công.
.Thứ Sáu, 2 tháng 10, 2015
Cài đặt VestaCP để tạo host trên máy chủ Linux
https://www.youtube.com/watch?v=i6xuPU2Cyxc
VestaCP đã được mình nhắc đến trong bài Những control panel miễn phí tốt nhất cho máy chủ Linux vì tính chất dễ cài đặt, hỗ trợ nhiều chức năng quan trọng và đặc biệt là mình dùng trong vài tháng thì chưa thấy lỗi gì xảy ra nên mình nghĩ nó có thể là sự lụa chọn tốt để thay thế CWP vốn mình đã giới thiệu trước đó.
VestaCP tuy gọn nhẹ nhưng lại có khá nhiều tính năng quan trọng để bạn có thể tự tạo ra cho mình những gói host cho chính mình hoặc thậm chí là cho khách hàng.
Hỗ trợ nhiều hệ điều hành khác nhau như RHEL/CentOS 5 và 6, Debian 7, Ubuntu 12.04 đến 14.04. Sử dụng Apache Webserver kèm với NGINX làm proxy để tăng tốc website. PHPMySQL / phpMyAdminDoveCotEximVsFTPDWebalizerRoundCubeHỗ trợ Backup/Restore cho người dùngVà dĩ nhiên, mặc dù nói ra hơi thừa nhưng mà với VestaCP bạn có thể tạo ra các gói host để chạy WordPress như các gói host bình thường, có khi tốt hơn tùy theo chất lượng máy chủ của bạn.
Trước khi cài đặt VestaCP, bạn phải chắc chắn là cài trên máy chủ chưa được cài đặt bất cứ cái gì ngoại trừ hệ điều hành để tránh gây lỗi trong quá trình cài đặt.
Tham khảo: Những nhà cung cấp máy chủ/VPS Linux tốt nhất
Để cài đặt VestaCP, bạn chạy lệnh sau:
$ curl -O http://vestacp.com/pub/vst-install.sh$ bash vst-install.shVà đợi, nó sẽ hỏi bạn có muốn cài đặt VestaCP vào máy chủ hay không, ấn y và Enter.
Sau đó bạn nhập email của bạn vào vì email đó sẽ thiết lập email cho quản trị. Phần hostname, bạn có thể điền kiểu sv.domain.com hoặc để mặc định cũng được.
Sau đó bạn sẽ cần đợi khoảng 15 phút để nó cài đặt.
Sau khi cài xong thì nó sẽ cung cấp thông tin quản trị VestaCP cho bạn như hình dưới.
Trong đó, tài khoản admin là tài khoản có quyền cao nhất, bạn sẽ sử dụng nó để quản lý các tài khoản con khác nếu có hoặc có thể thêm website vào.
Bây giờ hãy truy cập vào địa chỉ đăng nhập VestaCP là https://IP-của-bạn:8083 và dùng tài khoản admin đăng nhập vào. Lưu ý, nếu có thông báo cảnh báo HTTPS thì hãy bỏ qua nó.
Mặc định khi cài xong thì bạn sẽ có tài khoản admin để quản trị website và các thiết lập trong VestaCP. Nhưng nếu bạn cần tạo một tài khoản khác cấp nhỏ hơn chỉ để quản lý website thì có thể tạo ra. Cách tạo là bạn hãy truy cập vào phần User và ấn vào nút tạo.
Và nhập thông tin user cần tạo.
Và tất cả mọi người dùng đều sẽ đăng nhập qua địa chỉ https://IP-của-bạn:8083 hoặc có thể đăng nhập vào với giao thức FTP.
Trước tiên là đăng nhập vào VestaCP với tài khoản mà bạn cần thêm website. Sau đó vào phần Web và ấn nút thêm.
Và sau đó, các bạn trỏ tên miền của website vừa thêm về địa chỉ IP của máy chủ là nó chạy được. Còn lại các bạn tự mò nhé, dễ thôi.
Mặc dù VestaCP có hỗ trợ địa chỉ DNS của riêng bạn nhưng ở đây mình sẽ hướng dẫn bạn cách trỏ tên miền về host sử dụng VestaCP. Còn cách đăng ký DNS riêng thì bạn có thể làm thông qua nhà cung cấp Namecheap hoặc Godaddy vì họ có sẵn chức năng đó.
Và mình sẽ sử dụng dịch vụ DNS trung gian của CloudFlare để có thể sửa DNS linh hoạt hơn.
Xem thêm: Các thêm website vào CloudFlare.
Trước tiên, bạn nên thêm tên miền vào VestaCP như hướng dẫn trên.
Sau đó vào mục DNS, chọn tên miền bất kỳ và chọn List 11 Records.
Ở đây bạn sẽ thấy toàn bộ các bản ghi trong DNS mà bạn cần phải trỏ về. Bây giờ chúng ta sửa DNS của tên miền giống y hệt như vậy.
Thế là xong.
Khi tạo ra người dùng, thì bạn có thể đăng nhập vào FTP thông qua chính thông tin người dùng đó, cụ thể bạn có thể đăng nhập với thông tin như sau:
FTP Hostname: Địa chỉ IP hoặc domain đã trỏ về hoặc hostnameFTP Username: tên người dùngPassword: mật khẩu người dùngPort: 22Khi vào đó, bạn truy cập vào thư mục web/ sẽ thấy thư mục của tất cả các domain đã thêm vào người dùng đó.
Việc sử dụng VestaCP chỉ có như vậy, còn lại các thao tác thì mình đã có nói rõ trong video hết nên mình nghĩ là nó cũng dễ sử dụng thôi. Nếu các bạn có thắc mắc gì thì hãy vào hoidap.thachpham.com để mình và mọi người hỗ trợ thêm nhé.
.Hướng dẫn tự tạo Widget
https://www.youtube.com/watch?v=trG0y5AIE04&feature=youtu.be
Widget trong WordPress ai cũng hiểu nó là một block nội dung được đặt trong một khu vực được chỉ định, khu vực này ta thường gọi là Widget Area hoặc Sidebar. Ngoài các widget có sẵn như Recent Posts, Recent Comments,…thì nếu muốn có thêm widget bạn phải cài plugin hoặc một số theme cũng cho bạn thêm vài widget tùy chọn.
Vậy làm thế nào để hiểu quy trình tạo một widget ra sao? Ở bài này mình sẽ phân tích kỹ lưỡng cách tạo một widget là như thế nào, nhưng dĩ nhiên là bạn cần có sẵn kiến thức PHP ví dụ như bạn nên hiểu Class và đối tượng trong PHP là thế nào.
Xem trước: Widgets API – WordPress Codex
Trong WordPress đã có sẵn một class tên là WP_Widget, trong class này có những method (phương thức), nghĩa là bạn phải viết các phương thức này theo chuẩn của nó, không được thiếu mà cũng không có thừa và phải viết đúng tên phương thức.
Trong class WP_Widget có tổng cộng 3 phương thức bắt buộc, bao gồm:
__construct: Phương thức khởi tạo này sẽ có nhiệm vụ khai báo tên widget, mô tả widget.
form: Phương thức này sẽ hỗ trợ bạn tạo các form nhập liệu bên trong một widget, xem hình dưới.
update: Phương thức này sẽ hỗ trợ bạn lưu dữ liệu mà người dùng đã nhập vào các form mà bạn đã tạo bằng phương thức form.
widget: Phương thức này sẽ giúp bạn gọi dữ liệu và hiển thị ra ngoài website khi bạn gắn cái widget này lên.
Ngoài ra, trong class này bạn cũng phải khai báo một phương thức nào đó do bạn tùy chọn để thiết lập tên và mô tả của widget. Một số thì dùng phương thức __construct() và một số thì tự tạo một phương thức khác. Ở đây mình chọn cách tự tạo phương thức vì nó dễ nhìn và dẽ hiểu hơn.
Bạn có thể thực hành bài này bằng cách viết code vào file functions.php trong theme, nhưng tốt hơn hết là bạn tạo một plugin đi. Tạo một file với tên nào đó ở thư mục wp-content/plugins và viết đoạn này ở đầu file
Khỏi cần nói cũng biết, các code thực hành trong bài này bạn viết vào bên dưới dòng trên nhé.Đầu tiên, để khởi tạo một widget thì ta có 4 đoạn sau để khởi tạo.
/* * Khởi tạo widget item */add_action( 'widgets_init', 'create_thachpham_widget' );function create_thachpham_widget() {register_widget('Thachpham_Widget');}Trong đó, Thachpham_Widget là class mà chút nữa chúng ta sẽ tạo.
Như mình đã nói, bây giờ chúng ta sẽ tạo một class mang tên Thachpham_Widget kế thừa cái class WP_Widget mặc định, trong đó sẽ có 3 phương thức bắt buộc là form, update, widget và kèm theo một phương thức để đặt tên cho widget. Ta có như sau.
/** * Tạo class Thachpham_Widget */class Thachpham_Widget extends WP_Widget {/** * Thiết lập widget: đặt tên, base ID */function __construct() {}/** * Tạo form option cho widget */function form( $instance ) {}/** * save widget form */function update( $new_instance, $old_instance ) {}/** * Show widget */function widget( $args, $instance ) {}}Mình đã có comment rõ ràng trong đó rồi nhé.
Bây giờ bạn thử lưu lại xem và có thấy phần Appearance -> Widget của mình xuất hiện thêm một cục không ghi tên như hình dưới không, nếu có thì bạn đã làm đúng.
Ở bước này, chúng ta sẽ làm việc trong phương thức __construct() nhé. Bây giờ ta sẽ tạo cho nó một cái mảng bao gồm các giá trị như sau:
function __construct() { parent::__construct ( 'thachpham_widget', // id của widget 'ThachPham Widget', // tên của widget array( 'description' => 'Mô tả của widget' // mô tả ) );}Trong đó, các thông tin mình đã có ghi chú thích vào trong đó rồi nhé.
Bây giờ chúng ta gắn cái biến này vào đoạn sau.
Bây giờ lưu lại và vào Appearance -> Widget tìm cái tên widget mà bạn vừa tạo ra nào.
Bất kỳ widget nào cũng nên có một form nhập liệu để khách nhập những tùy chọn hay giá trị nào đó vào đây, bạn có thể sử dụng dropdown, checkbox,…nhưng ở đây mình sẽ dùng input loại text cho đơn giản.
Trong bước này ta sẽ làm việc trong phương thức form() nhé. Phương thức này ta có một biến là $instance.
Đầu tiên ra khai báo một mảng như sau:
//Biến tạo các giá trị mặc định trong form$default = array('title' => 'Tên của bạn');Mảng này có vai trò thiết lập các giá trị mặc định cho từng form. Ví dụ bạn có một form tên title thì giá trị mặc định của nó nếu người dùng chưa nhập vào là Tên của bạn, nếu bạn có nhiều form thì làm thêm nhiều giá trị trong mảng này.
Kế tiếp là viết thêm đoạn này
//Gộp các giá trị trong mảng $default vào biến $instance để nó trở thành các giá trị mặc định$instance = wp_parse_args( (array) $instance, $default);Đoạn này bạn hiểu đơn giản là nó sẽ lôi toàn bộ giá trị mảng của biến $default sang biến $instance.
Tiếp tục viết thêm một đoạn này
//Tạo biến riêng cho giá trị mặc định trong mảng $default$title = esc_attr( $instance['title'] );Đơn giản là ta đưa $instance['title'] vào một biến cho dễ nhớ, dễ viết. Trong đó, $title là biến sẽ chứa giá trị của tiêu đề lấy từ khóa title trong mảng $instance.
Và cuối cùng là đoạn quan trọng nhất, chúng ta sẽ tạo ra một cái trường nhập liệu và nó sẽ hiển thị giá trị là biến $title. Điều này có nghĩa là nếu như sau này chúng ta truyền giá trị mới cho $title thì nó cũng sẽ hiển thị ra.
//Hiển thị form trong option của widgetecho "Nhập tiêu đề get_field_name('title')."' value='".$title."' />";Bây giờ bạn lưu lại và mở widget ra sẽ thấy có một form và thuộc tính mặc định như sau:
Bạn có thể thử bằng cách nhập một cái gì đó vào form rồi ấn Save lại thì thấy nó không được lưu lại mà toàn trả về giá trị mặc định. Đó là do chúng ta chưa viết code cho phương thức update.
Toàn bộ code trong bước này:
/** * Tạo form option cho widget */function form( $instance ) {parent::form( $instance );//Biến tạo các giá trị mặc định trong form$default = array('title' => 'Tiêu đề widget');//Gộp các giá trị trong mảng $default vào biến $instance để nó trở thành các giá trị mặc định$instance = wp_parse_args( (array) $instance, $default);//Tạo biến riêng cho giá trị mặc định trong mảng $default$title = esc_attr( $instance['title'] );//Hiển thị form trong option của widgetecho "Nhập tiêu đề get_field_name('title')."' value='".$title."' />";}Bước này ta sẽ làm việc với phương thức update(). Trong phương thức này ta có hai tham số chính là $new_instance được dùng để lưu những giá trị sau khi ấn nút Save và $old_instance là giá trị cũ trong cơ sở dữ liệu. Sau khi dữ liệu nhập vào được lưu thì ta sẽ return nó ra.
Ta có
$instance = $old_instance;$instance['title'] = strip_tags($new_instance['title']);return $instance;Nghĩa là ở trên mình sẽ lưu lại các giá trị trong form nhập tiêu đề. Hàm strip_tags() được sử dụng để cho cái form không thực thi PHP và HTML.
Toàn bộ code sẽ là
/** * save widget form */function update( $new_instance, $old_instance ) {parent::update( $new_instance, $old_instance );$instance = $old_instance;$instance['title'] = strip_tags($new_instance['title']);return $instance;}Bây giờ bạn thử viết gì vào form rồi lưu lại, các giá trị sẽ lưu lại.
Ta đã tạo form, rồi lưu dữ liệu trong form vào. Vậy làm thế nào để có thể xuất nó hiển thị ra ngoài đây? Trong bước này ta sẽ làm việc với phương thức widget để hiển thị nó ra ngoài.
Trong phương thức này ta có 2 tham số là $args để khai báo các giá trị thuộc tính của một widget (title, các thẻ HTML,.) và $instance là giá trị mà khách đã nhập vào form trong widget.
Nếu bạn muốn sử dụng lại các thuộc tính bên trong widget thì tốt hơn hết bạn nên extract cái array trong widget ra thành từng biến riêng. Ta có:
extract( $args );Sau đó, để hiển thị giá trị của một form thì ta chỉ cần echo $instance['form_name']. Như ví dụ này thì ta có $instance['title'].
Nhưng do cái form này là ta nhập tiêu đề của widget nên bạn nên thêm filter hook cho nó để đúng chuẩn trong WordPress.
echo apply_filters( 'widget_title', $instance['title'] );Nhưng mà đợi đã, ta không thể viết chay như vậy, tại sao? Bởi vì trong Widget nó có những cái hook như hook vị trí trước widget (before widget), sau widget (after widget) và quan trọng là nếu bạn hiển thị cái tiêu đề widget như thế kia thì không được do ta thiếu hook $before_widget và $after_widget, hai biến này là hook in ra thẻ heading để tiêu đề widget hiển thị đúng “phong cách”.
Như vậy, ta tạm đưa đoạn apply_filters() vào trong một biến:
$title = apply_filters( 'widget_title', $instance['title'] );Sau đó ta viết như sau:
echo $before_widget;//In tiêu đề widgetecho $before_title.$title.$after_title;// Nội dung trong widgetecho "ABC XYZ";// Kết thúc nội dung trong widgetecho $after_widget;Như vậy, khi in widget ra bạn bắt buộc phải echo thêm biến $before_widget và $after_widget để bọc nội dung lại, không có nó không có hiển thị đâu nhé.
Và kết quả là:
Toàn bộ code trong bước này là:
function widget( $args, $instance ) {extract( $args );$title = apply_filters( 'widget_title', $instance['title'] );echo $before_widget;//In tiêu đề widgetecho $before_title.$title.$after_title;// Nội dung trong widgetecho "ABC XYZ";// Kết thúc nội dung trong widgetecho $after_widget;}Quá dễ phải không nào.
Tải source code
Bạn đã biết cách tạo một widget là như thế nào rồi, vậy thì tại sao lại không thực hành nó ngay? Ở đây mình sẽ thực hành cách tạo một widget hiển thị bài viết ngẫu nhiên với tùy chọn cho phép khách nhập số lượng bài cần hiển thị bằng việc ứng dụng khái niệm Loop và Query.
class Random_Post extends WP_Widget { function __construct() { parent::__construct( 'random_post', 'Bài ngẫu nhiên', array( 'description' => 'Widget hiển thị bài viết ngẫu nhiên' ) ); } function form( $instance ) { $default = array( 'title' => 'Tiêu đề widget', 'post_number' => 10 ); $instance = wp_parse_args( (array) $instance, $default ); $title = esc_attr($instance['title']); $post_number = esc_attr($instance['post_number']); echo 'Nhập tiêu đề
'; echo 'Số lượng bài viết hiển thị
'; } function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['post_number'] = strip_tags($new_instance['post_number']); return $instance; } function widget( $args, $instance ) { extract($args); $title = apply_filters( 'widget_title', $instance['title'] ); $post_number = $instance['post_number']; echo $before_widget; echo $before_title.$title.$after_title; $random_query = new WP_Query('posts_per_page='.$post_number.'&orderby=rand'); if ($random_query->have_posts()): echo "Như vậy là bạn đã biết qua cách tạo một widget là như thế nào rồi đúng không nào? Thoạt nhìn code có thể bạn nghĩ nó khó nhưng thật ra nó chẳng có gì khó cả và mình tin là bạn có thể tự làm được sau khi đọc kỹ bài của mình.
Nếu có gì thắc mắc, hãy comment phía dưới nhé.
Tham khảo: Cách tạo widget nhanh với scbFramework – WordPressKite
.