Thứ Sáu, 2 tháng 10, 2015

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.

Mẫu form trong widgetMẫu form trong widget

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.

create_widget_form_basic

Ở 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.

Title và Description của widgetTitle và Description của widget

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:

create_widget_form_new

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à:

create_widget_show

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 "
    "; while( $random_query->have_posts() ) : $random_query->the_post(); ?>
  1. "; endif; echo $after_widget; }}add_action( 'widgets_init', 'create_randompost_widget' );function create_randompost_widget() { register_widget('Random_Post');}

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

.

Cài đặt SSL và giao thức HTTP/2 cho NGINX trên CentOS 7

Bài viết này thuộc tác giả Công Hải của Vietstar. Net gửi đến độc giả thachpham.com.

Trong tháng 2 vừa qua, một kiểu giao thức web mới vừa được IESG chấp thuận mang nhiều tính năng vượt trội hơn, giúp website tối ưu tốc độ hơn đó là giao thức HTTP/2. Vậy thì HTTP/2 là gì, nó có những ưu điểm nào thì trong bài này, tác giả Công Hải tại VietStart. Net sẽ giới thiệu và hướng dẫn các độc giả tại thachpham.com cách cài đặt nó vào máy chủ Linux sử dụng CentOS 7.

HTTP (Hypertext Transfer Protocol) là một giao thức truyền chuẩn về mạng (truyền tải siêu văn bản – nói nôm na là giao thức web). HTTP 1.1 ra đời vào năm 1997 và vẫn được sử dụng đến hiện tại mà chưa hề có một nâng cấp nào. Có lẽ đã quá cũ nên vào 12/2014 nhóm phát triển của Hypertext Transfer Protocol đã đề xuất lên IESG xem HTTP/2 như là một tiêu chuẩn mới. Và đã được IESG chấp thuận vào ngày 17/02/2015.

HTTP 2 phát triển dựa trên SPDY (pronounced speedy) một giao thức mạng mở được phát triển bởi Google.

Có thể bạn cần:

Sự khác biệt thì rất nhiều nhưng mình tóm lại sự khác biệt lớn nhất giữa 2 giao thức là: HTTP2 hỗ trợ các truy vấn ghép, nén nội dung, ưu tiên và quản lý thông minh hơn các luồng dữ liệu. Điều đó gây ra việc giảm độ trễ và tăng tốc tải nội dung web.

HTTPS (Hypertext Transfer Protocol Secure) là một sự kết hợp giữa giao thức HTTP và giao thức bảo mật SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet.

Hiện có rất nhiều bài hướng dẫn cài đặt SSL nhưng thật sự rất ít bài làm đúng. Ngay cả tinhte.vn cũng chưa thực sự cài đúng.

Các bạn có thể test SSL của website tại: https://www.ssllabs.com/ssltest/index.html

Kết quả test của tinhte.vn.

ssl-report-tinhte

Kết quả test của vietstar.net.

ssl-report-vietstar

Nên hôm nay, mình sẽ hướng dẫn bạn cài đặt và cấu hình HTTPS với HTTP2 lên chuẩn A+.

Ngày 22/09/2015 vừa rồi NGINX đã ra phiên bản mainline 1.9.5 chính thức hỗ trợ HTTP 2, và từ này chính thức say goodbye SDPY một thời hùng hậu. Như vậy, điều này có nghĩa là bạn chỉ có thể sử dụng HTTP 2 trên NGINX phiên bản 1.9.5 trở lên, nếu bạn đang dùng NGINX thì hãy gõ nginx -v để kiểm tra phiên bản NGINX hiện tại của bạn.

Nếu bạn đang dùng Centminmod, thì từ phiên bản Centmin Mod 1.2.3-eva2000.09 beta đã hỗ trợ NGINX 1.9.5.

Để cài NGINX 1.9.5, bạn cần nạp package vào. Hãy tạo file /etc/yum.repos.d/nginx.repo và chèn đoạn dưới đây vào hoặc nếu có rồi thì sửa nội dung:

[nginx]name=nginx repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=0enabled=1

Sau đó cập nhật lại gói yum.

yum update -y

Và cài NGINX vào với lệnh sau:

yum install nginx

Sau khi cài đặt bạn kiểm tra lại có phải là version 1.9.5 và có module http 2 (--with-http_v2_module) bằng lệnh sau:

nginx -V

Sau khi cài đặt xong, hãy thiết lập NGINX sử dụng HTTP 2 bằng cách mở tập tin cấu hình NGINX của bạn tại /etc/nginx/conf.d và đổi phần listen 80 thành thế này:

server { listen 443 ssl http2; server_name domain.com www.domain.com; .}

Và bạn hãy tạo chứng chỉ SSL, sau đó upload lên server giống như bài này (trừ bước số 5 chúng ta sẽ sửa lại 1 xíu ở bên dưới)

Thiết lập chứng thực vùng nhớ (Session cache)

Điều này là khá quan trọng vì khi truy cập giao thức SSL thì lần đầu sẽ xử lý rất nặng và nhiều (Nên khi truy cập vào trang web https lần đầu tiên thường lâu hơn so với lần sau). Thiết lập này sẽ giúp NGINX nhớ session của user và  không cần chứng thực cho request kế tiếp.

ssl_session_cache shared:SSL:20m;ssl_session_timeout 180m;

Ý nghĩa dòng 1 là tạo vùng nhớ 20MB cho chứng thực SSL. Theo tài liệu của NGINX thì 1MB chứ 4000 session. Vậy 20MB tương đương với 80.000 Session (bạn có thể điều chỉnh cho phù hợp với nhu cầu server bạn).

Dòng thứ 2 là lưu nó trong 180 phút (3 tiếng) con số này phù hợp với khoảng thời gian User truy cập website bạn. Nếu website bạn cần bảo mật hơn thì có thể giảm con số này xuống nhưng KHÔNG NÊN giảm dưới 10 phút.

Vô hiệu hóa SSL

Có thể là bạn nói tôi khùng, đang setup SSL giờ là vô hiệu hóa nó.

Nói vậy thôi, chứ thực ra là thay thế SSL (Secure Sockets Layer) bằng TLS (Transport Layer Security). Vì thực tế là SSL còn nhiều điểm yếu hơn là TLS. Tuy nhiên IE6 không hỗ trợ TLS (nhưng chắc là IE6 đã quá cổ rồi, tìm cũng chẳng còn đâu).

Thêm dòng sau tiếp theo 2 dòng trên:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Tối ưu hóa Cipher Suites (Bộ mã hóa)

Trung tâm xử lý, mã hóa, giải mã của SSL/TLS là chổ này (tạm hiểu vậy vì mình không phân tích sâu vào cơ chế hoạt động của nó).

Khai báo NGINX bật bộ mã hóa:

ssl_prefer_server_ciphers on;

Khai bao danh sách các cơ chế mã hóa được chấp nhận:

ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5

Tạo ra các thông số DHParam

Tạo file DH (Diffie-Hellman) với 2048 bit (đủ chết cho những thằng muốn hack):

openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem

Sau đó thêm vào config dòng sau:

ssl_dhparam /etc/nginx/cert/dhparam.pem;

@Lưu ý: Nếu client của bạn dùng JAVA 6 trở xuống thì nên dùng 1024 bit thôi nhé 😀

Kích hoạt OCSP

OCSP (Online Certificate Status Protocol) được hiểu như là kiểm tra chứng thức của bạn với nhà cùng cấp SSL (theo bài tạo chứng chỉ SSL đây là COMODO). Tạo ra file Khai báo với NGINX của bạn đây là giấy thức bằng cách sử dụng lệnh sau:

cat AddTrustExternalCARoot.crt PositiveSSLCA2.crt > trustchain.crt

File AddTrustExternalCARoot.crt là file gốc, file PositiveSSLCA2.crt là file chứng thực trung gian có kèm theo trong file zip khi bạn mua SSL hoặc download của COMODO tại đây.

Tiếp theo là cấu hình NGINX stapling

ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/cert/trustchain.crt; resolver 8.8.8.8 8.8.4.4;

Ở đây là mình dùng qua DNS Google, bạn có thể dùng DNS nào khác mà bạn tin tưởng hoặc nhanh hơn.

Cấu hình Strict Transport Security

Sau khi server đã chứng thực xong thì trả về trình duyệt thời gian chứng thực được chấp nhận, trong thời gian này khi request trình duyệt không cần gửi chứng thực với Server nữa (Dó là lý do tại sao chỉ nặng lúc đầu).

Thêm dòng sau vào config file:

add_header Strict-Transport-Security "max-age=31536000" always;

Trong trường hợp chứng thực này được dùng cho nhiều subdomain thì sửa lại như sau:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

That All, chỉ thế thôi. Bạn save lại file và restart NGINX và có thể kiểm tra xem SSL của bạn được loại gì rồi nào?

Sau khi cấu hình xong bạn sẽ có file cấu hình NGINX của domain như thế này đây:

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name your_domain.com; ssl_certificate /etc/nginx/cert/your_key.certchain.crt; ssl_certificate_key /etc/nginx/cert/your_key.key; ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; ssl_dhparam /etc/nginx/cert/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/cert/trustchain.crt; resolver 8.8.8.8 8.8.4.4; add_header Strict-Transport-Security "max-age=31536000" always; #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # Cấu hình của bạn ở dưới này …}

Sau đó bạn có thể kiểm tra server đã dùng HTTP 2 chưa bằng cách cài plugin HTTP/2 and SPDY indicator của Chrome.

http2-enabled

Thế thôi, rất đơn giản phải không nào? Nhìn chung cách cài đặt SSL và bật HTTP/2 cũng khá đơn giản, nó cũng giống như mình kích hoạt SPDY mà thôi nhưng chỉ khác là thay spdy thành http2 trong phần listen của tập tin cấu hình mà thôi. Nhưng ngoài việc đó, trong bài này bạn cũng đã biết thêm một vài kỹ thuật quan trọng để cấu hình SSL an toàn hơn để đạt chuẩn A+ tại SSLLabs.

Chúc các bạn làm thành công và đừng quên vào hoidap.thachpham.com nếu bạn cần hỗ trợ.

.

12 themes WordPress miễn phí tháng 9/2015

Đầ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é.

libre-wordpress-theme

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à).

evision-corporate-theme

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ụ,….

quality-theme

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é.

zincy-lite-theme

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.

luna-wordpress-theme

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.

skrollr-theme

Đâ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.

canyon-theme

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.

publication

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.

cerauno-theme

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.

canard-theme

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.

auberge-theme

Đâ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á đủ.

twenty-sixteen-theme

Đâ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.

.

Thứ Bảy, 4 tháng 4, 2015

Chương trình offline Meetup WordPress Sài Gòn tháng 4/2015

Đam mê với web và lập trình, thích viết và chia sẻ, nghiện cà phê và xăm mình, hứng thú với nhạc dân ca và nhạc không lời.

19 themes WordPress miễn phí đẹp nhất tháng 3/2015

Trong tháng vừa qua mình không giới thiệu serie các theme đẹp nhất do về Việt Nam ăn Tết, thành qua tháng này mình sẽ giới thiệu bù nên số lượng các theme đẹp sẽ nhiều hơn so với các tháng khác. Trước khi bước qua tháng 4, chúng ta cùng nhau điểm danh lại một số theme WordPress miễn phí tuyệt đẹp mà trong tháng vừa qua đã được ra mắt, có thể từ đó bạn sẽ tìm ra được một theme mà các bạn cần.

optimizer-theme

Mình biết đến Optimizer do nhà sản xuất đã gửi email mình nhờ mình xem qua và viết bài giới thiệu. Thực chất là ngay sau khi xem qua theme này thì mình đã định viết một bài riêng để giới thiệu các tính năng tuyệt vời của nó, tuy nhiên trước tiên mình cần phải giới thiệu về nó ở đây cái đã.

Optimizer là một theme có độ tùy biến cao và bạn có thể xây dựng một giao diện theo ý thích từ khung mẫu có sẵn của Optimizer. Nếu bạn click vào chữ Demo ở trên và xem thì có thể thấy họ có đưa ra khá nhiều mẫu demo để bạn xem nhưng đều làm trên một theme duy nhất, và bạn có thể làm được nhiều hơn thế.

Theme này được tích hợp sẵn hơn 600+ font chữ từ Google Font, nhiều widget đẹp mắt và độc đáo như Social, Countdown, Ads,…và được tối ưu SEO/tốc độ khá tốt.

lotus-free-theme

Thêm một theme miễn phí dành cho website tin tức, tạp chí lại ra đời mang tên Lotus. Với theme này bạn có thể làm một trang tin tức cho riêng mình hoàn toàn miễn phí, và bạn cũng có thể tích hợp thêm Woocommerce để bổ sung tính năng bán hàng vì nó cũng đã được tối ưu cho việc hiển thị sản phẩm của Woocommerce.

Điểm độc đáo của theme này là bạn có thể tạo ra sidebar riêng và có thể tùy ý sử dụng từng sidebar cho từng trang khác nhau trên website.

rowling-free-theme

Anders Noren là một nhà thiết kế của Thụy Điển đã khá nổi tiếng với việc thường xuyên chia sẻ một số theme dành cho chủ đề blog do chính tay anh ấy thiết kế, tất cả theme của Anders Noren đều mang một nét đẹp đơn giản nhưng rất tinh tế, từ việc phối màu và sử dụng loại font chữ. Rowling là một sản phẩm miễn phí mới nhất của Anders Noren và dĩ nhiên là nó rất đẹp.

Với cách hiển thị và bố cục làm ta liên tưởng đến theme Hueman đình đám nhưng Rowling lại có phần đơn giản hơn, gọn nhẹ hơn dành cho những bạn cần một theme dành cho blog đẹp mà lại dễ dàng cài đặt.

adironnack-theme

Có thể bạn sẽ cần một theme với kiểu thiết kế khác lạ làm giao diện cho blog của mình, mà nếu blog bạn có nhiều hình ảnh và đặt những tấm ảnh tuyệt đẹp làm Featured Image thì theme này bạn nên sử dụng thử vì nó có thể làm tăng thêm vẻ đẹp cho website nhờ chính những hình ảnh đại diện đó.

Một điều bạn nên lưu ý là theme Adirondack này có một bài hướng dẫn ngắn khá chi tiết về cách thiết lập, bạn có thể xem tại đây.

amplify-theme

Amplify thích hợp cho các nhu cầu tạo một trang resume cá nhân và trưng bày các tác phẩm trong portfolio của mình vì nó được thiết kế để làm việc đó. Ngay tại trang chủ, bạn có thể đặt các nút Call to Action khá đẹp mắt, các khung tự giới thiệu,…

biancaa

BiancaA là một theme dành cho blog hiếm hoi của Theme Junkie - một nhà cung cấp theme WordPress trả phí mà Thạch rất thích vì các theme đầy chất lượng (giao diện Thachpham.com là của Theme Junkies đấy chứ). Theme này mang hơi hướm của phong cách Minimalist (phong cách tối giản) với hai màu chủ đạo là đen trắng, không mang nhiều chi tiết phức tạp nhưng nó vẫn có nét đẹp riêng của nó nhờ vào bố cục hài hòa.

Trong mỗi bài viết riêng, bạn có thể tùy chỉnh hiển thị sidebar bên trái hoặc phải tùy thích hoặc thậm chí là không có sidebar nào để phù hợp với nhu cầu của bạn.

tiles-free-theme

Tại sao lại không trưng bày các hình ảnh lên blog của mình với một phong cách cuốn hút hơn thay vì sử dụng một giao diện WordPress không phù hợp? Nếu bạn thích đăng ảnh lên blog của mình thì hãy thử cài qua theme Tiles này vì nó được thích hợp cho các blog về ảnh do hội tụ đủ các yếu tố như hiển thị hình ảnh đẹp, khung nội dung rộng rãi để hiển thị các tấm ảnh có kích thước lớn.

boardwalk-theme

Đây là một theme đang được sử dụng tại dịch vụ WordPress.Com nhưng nếu bạn là người dùng WordPress tự host thì đã có thể sử dụng hoàn toàn miễn phí. Boardwalk là một theme rất độc đáo khi việc hiển thị các bài viết mới ở trang chủ theo dạng slide trượt ngang rất đẹp, và trang hiển thị nội dung bên trong cũng có phần lộng lẫy không kém.

Nếu bạn thích theme này mà không thích việc hiển thị kiểu slide thì có thể sử dụng child theme Cubic của nó.

photolab-theme

Tuy là một theme đơn giản dành cho blog nhưng cách bày trí bài viết của theme này có nét rất khác lạ và tận dụng chiều rộng tối đa của trình duyệt để làm nổi bật hình ảnh bên trong bài viết. Theme này có hỗ trợ một số loại Post Format mà bạn có thể sử dụng để nó hiển thị bài viết theo kiểu khác nhau.

sksdev-theme

SKSDEV là một theme dạng One Page (chỉ một trang duy nhất) miễn phí khá đẹp trong thời điểm hiện tại, bạn có thể sử dụng nó để làm các trang giới thiệu doanh nghiệp hoặc một dịch vụ nào đó.

codiumnow-theme

CodiumNow khá đơn giản nhưng thích hợp cho nhu cầu làm blog hoặc tự phát triển lại thành một theme đẹp hơn, tính năng của nó cũng không có gì ngoài việc hiển thị bài viết thành 3 cột ở trang chủ, nhưng chính vì vậy mà theme này rất nhẹ.

jovial-theme

Theme này trông rất đơn giản và gọn gàng, nhưng được tích hợp sẵn menu có hỗ trợ dropdown khá đẹp mắt thì tại sao lại không sử dụng nó để phát triển thành một theme khác của riêng mình từ bố cục này nhỉ? Có thể gọi đây là một Starter Theme khá là tốt.

keratin-theme

Keratin nổi bật vì chính sự đơn giản của nó, không gian thoáng đãng cùng với những khoảng cách hợp lý giúp nó trở thành một theme rất đẹp mặc dù chỉ có hai màu trắng và đen. Nhưng có vẻ cách thiết kế này phù hợp với dân designer hơn là người dùng phổ thông.

wikiwp-theme

Tại sao lại không trình bày nội dung bài viết của mình giống như một trang Wiki chứ? Mặc dù theme này không phải là một theme tạo hệ thống Wiki chuyên nghiệp nhưng cách hiển thị nó có thể làm bạn thỏa mãn mong muốn biến blog mình thành một trang Wiki nghiệp dư.

aventurine-theme

Aventurine là một theme đơn giản mà rất đẹp cho các nhu cầu viết blog, viết sách hoặc có thể đăng bất cứ gì mà bạn cho là thích hợp với một giao diện nhiều chữ. Nó được tích hợp sẵn các tùy chọn khá thuận tiện tại Customize để bạn có thể thay đổi từng tùy chỉnh trong theme nhanh chóng.

mayer-theme

Sau khi xem qua demo, bạn có nghĩ rằng theme Mayer này có giá $79 cho những người sử dụng dịch vụ WordPress.com? Đúng vậy, đây là một theme trả phí cho người dùng WordPress.Com nhưng nếu bạn sử dụng WordPress tự host thì bạn có thể cài đặt theme này hoàn toàn miễn phí vì nó đã trở thành nguồn mở.

harmonic

Nếu bạn thích sử dụng một theme nổi trội, thích sử dụng hình ảnh làm ảnh nền thì hãy thử một theme nặng hàng tấn như Harmonic, nó nặng vì trang demo của nó có dung lượng là 7MB vì quá nhiều ảnh.

Tuy nặng là vậy nhưng Harmonic rất đáng để sử dụng, nhất là các trang về blog. Ngoài ra, nó cũng hỗ trợ một khu vực Media để hiển thị hình ảnh theo album rất đẹp.

sprig-theme

Nếu bạn là một lập trình viên cần tìm một Starter Theme mới nổi trội hơn, dễ phát triển hơn thì đừng nên bỏ qua Sprig, đặc biệt nếu bạn là fan của Twig. Bằng việc ứng dụng Twig vào template của theme, nó sẽ giúp bạn phát triển thành một theme mới nhanh hơn so với việc gõ code thủ công. Ví dụ dưới đây là một đoạn loop trong Sprig:

{% for post in posts() %} {% include 'content/content-excerpt.twig' %}{% endfor %}

It’s fast?

auberge-themeAuberge là một theme miễn phí rất đẹp dành cho website nhà hàng, quán cafe vì nó có hỗ trợ bạn đăng thực đơn các món ăn lên và được sắp xếp rất đẹp mắt, gọn gàng. Thêm vào đó, nó cũng được tích hợp thêm chức năng đặt hàng đơn giản nếu bạn có ý định cho phép khách đặt món ăn trên website WordPress của bạn.

Đó là 19 themes WordPress miễn phí đẹp nhất mà đã được ra mắt hoặc mình biết đến trong tháng 3/2015. Các theme trong tháng này mình nhận xét đều rất đẹp và đa dạng, đặc biệt là có sự góp mặt của một starter theme mới mình rất thích là Sprig. Hy vọng danh sách theme miễn phí tháng sau sẽ nhiều và đẹp hơn thế nữa.

vHost giảm giá VPS SSD nhân dịp Cá tháng tư 2015

Nhân dịp Cá tháng tư (Aprill Fool – 01/04), nhà cung cấp giải pháp máy chủ vHost có mục giảm giá sốc cho dịch vụ VPS sử dụng ổ cứng SSD của họ chỉ với 70.000 VNĐ/tháng và áp dụng cho máy chủ đặt tại Việt Nam và Singapore.

vhost-april-fool-banner

Cụ thể, các bạn sẽ được mua VPS ổ cứng SSD với cấu hình như sau:

CPU: 2 CoresRam: 1GBSSD: 10GBBăng thông: không giới hạn

Để lấy mã giảm giá, mời các bạn click vào nút bên dưới, sẽ có hai mã giảm giá đặc biệt dành cho việc mua 1 năm và 2 năm.

Cũng xin nói thêm rằng vHost là nhà cung cấp dịch vụ máy chủ khá chất lượng tại Việt Nam, và mình cũng đã sử dụng VPS tại vHost trong việc làm serie Học VPS căn bản của mình, nên mình tin rằng bạn sẽ cảm nhận được chất lượng dịch vụ tuyệt vời tại đây.

Thứ Bảy, 31 tháng 1, 2015

Kiếm Tiền Trên Mạng Với TeeSpring Tại Sao Lại HOT?

teespringNhiều bạn cứ hỏi mình trên facebook và qua email về thực hư chuyện bán áo thun trên Teespring hay nhiều trang khác là như thế nào. Xin trả lời các bạn đó là sự thất và trong bài viết về kiếm tiền trên mạng có phải là lừa đảo mình đã chia sẻ một chút về mô hình này.

Trước khi đi vào chi tiết mình cũng xin nói trước là mình không phải là người thành công lắm với mô hình bán áo thun này mà chỉ tham gia khi thấy nó có tiềm năng và kết quả cũng không phải là tồi. Xin chia sẻ lại để các bạn tham khảo thêm nhé.

Tài khoản 1 Tài khoản 1

Tài khoản 2 Tài khoản 2

Trước hết chúng ta cùng tìm hiểu về TeeSpring một chút. Đây là một trang dạng crowdfunded hiểu nôm na là huy động vốn từ cộng đồng để tạo ra các sản phẩm trên những chiếc áo thun/áo phông. Bạn tham gia miễn phí và có thể thiết kế tùy thích theo khả năng của mình với một công cụ thiết kế online thuộc dạng mạnh nhất so với các dịch vụ cùng loại hiện nay.

Bên cạnh đó, bạn được phép tự đặt mức giá, thời gian chạy chiến dịch và biết được mức lãi trên mỗi áo bán bạn ra là bao nhiêu nếu bạn đủ chi tiêu (tối thiểu là 10 cái). Tất nhiên nếu bạn bán vượt chi tiêu sẽ có bonus từ Teespring. Chính những tính năng này giúp bạn có được cảm giác tự do hơn khi thiết kế và bán áo thành công hơn.

Gần đây Teespring đưa thêm nhiều tính năng giúp người tham gia cơ hội bán nhiều hơn khiến mình cảm thấy đây là trang có sự phát triển mạnh nhất so với các trang cùng loại khác.

Đúng là thiết kế là chuyện không khó với nhiều bạn nhưng bán được hay không lại là chuyện khác. Tuy nhiên, sự kết hợp giữa Teespring + Facebook Ads đã tạo nên nhiều triệu phú đô la từ việc bán áo thun trên thế giới. Ở Việt Nam nhiều bạn cũng kiếm vài trăm ngàn USD chỉ từ việc bán áo này không phải là hiếm. Tiềm năng là không giới hạn!

Facebook là công cụ tốt nhất tại thời điểm này để quảng bá cho các mẫu áo thiết kế thông qua Facebook Ads hoặc Fanpage. Vấn đề là bạn cần ngân sách, biết sử dụng Facebook Ads và cách target đúng khách hàng tiềm năng.

Ví dụ: Bạn thiết kế một chiếc áo dành cho những phụ nữ yêu thích chó chẳng hạn thì bạn sẽ phải nhắm tới những ai yêu thích chó mà là nữ trên facebook thì quảng cáo chỉ hiện cho những người đó thôi.

Tất nhiên, kinh nghiệm sau khi chạy một vài chiến dịch sẽ giúp bạn tối ưu chi phí hơn cho các quảng cáo của mình.

Hiện tại, cho các chiến dịch của Teespring ngắn từ 3-23 ngày nên việc sử dụng SEO là điều không khả thi tron khi facebook bạn còn có thể tương tác với khách hàng tiềm năng khi họ băn khoăn về giá, vận chuyển hay độ uy tín…Kinh nghiệm cho thấy, việc trả lời các comment trên các chiến dịch facebook đóng góp rất lớn vào việc tăng doanh thu.

Trong khóa học tiếp thị liên kết V3 mình đã thêm 1 module chuyên về Teespring và sẽ mở rộng ra các mạng khác khi có thông tin và dường như các bạn có vẻ thích. Đơn giản đây là cách đâu tư thấy ngay lợi nhuận vì bạn có thể thấy lại trong 3 ngày hoặc 7 ngày. Teespring trả ngay lợi nhuận cho bạn khi chiến dịch thành công qua PayPal hay Payoneer đều được.

Với tâm lý kiếm tiền nhanh của nhiều bạn thì mô hình này có vẻ như là tương đối phù hợp giúp bạn lấy lại vốn ngay trong tuần.

Mốt lý do nữa bạn cần đăng ký ngay hôm nay qua link của mình là bạn sẽ nhận được thêm $1 cho mỗi áo bán ra và mình cũng thế. Đây là dạng win-win. Nghĩa là bạn đăng ký thẳng trên Teespring và mỗi áo bạn lãi $10 thì nếu bạn đăng ký tài khoản qua link dưới thì bạn sẽ lãi $11/áo. Quá tốt đúng không?

eBlogViet là blog cá nhân chuyên về tiếp thị liên kết, internet marketing và kiếm tiền trên mạng cho cộng đồng blogger Việt Nam. Đăng ký nhận tin RSS để không bỏ lỡ các tin cập nhật.