Thứ Bảy, 3 tháng 10, 2015

Nghi phạm đánh bom liên hoàn ở Trung Quốc đã chết

Tân Hoa xã đưa tin, cảnh sát thành phố Liễu Châu, Quảng Tây, xác nhận nghi phạm gây ra hàng loạt vụ nổ ngày 30/9 đã thiệt mạng vì một trong các vụ đánh bom.

Wei Yinyong (ảnh nhỏ) được cho là nghi phạm gây ra hàng loạt vụ nổ bom hôm 30/9 Liễu Châu, Quảng Tây. Ảnh: SCMP

Theo Tân Hoa Xã, dựa vào kết quả xét nghiệm ADN và những bằng chứng thu thập tại hiện trường, cảnh sát xác định nghi phạm đánh bom là Vi Ngân Dũng, 33 tuổi, sống tại thành phố Liễu Châu, khu tự trị Quảng Tây. Y đã thiệt mạng trong một vụ nổ.

Vi tự chế bom hẹm giờ và bọc chúng như những gói bưu kiện. Sau đó, y thuê nhiều người đem bom tới nhiều địa điểm khác nhau trong thành phố.

Báo cáo từ cảnh sát cho biết, Vi hành động nhằm trả thù một số người dân và tổ chức mà y có tranh chấp về việc kinh doanh và khai thác đá.

Chiều 30/9, hàng chục vụ nổ xảy ra ở 17 địa điểm rải rác tại huyện Liễu Thành, thành phố Liễu Châu, khiến 7 người chết và 51 người bị thương. Các địa điểm nổ bom gồm trung tâm thương mại, nhà giam, trụ sở huyện, siêu thị, bến xe, bệnh viện, nhà ở tập thể, chợ và trung tâm kiểm soát dịch bệnh.

Tống Hoa

.

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

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.

.

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

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.

.

Phát hiện hàng loạt sai phạm tại dự án đường sắt Cát Linh-Hà Đông

Thanh tra Bộ Lao động-Thương binh và Xã hội đã phát hiện 16 sai phạm về pháp luật lao động tại công trình đường sắt Cát Linh-Hà Đông và kiến nghị đơn vị tổng thầu trong tối đa 45 ngày phải khắc phục.

Hiện trường sự cố sụt xà mũ nhà ga tại công trường đường sắt đô thị Cát Linh-Hà Đông. (Ảnh: PV/Vietnam+)

Thanh tra Bộ Lao động-Thương binh và Xã hội đã phát hiện 16 sai phạm về pháp luật lao động tại công trình đường sắt Cát Linh-Hà Đông và kiến nghị doanh nghiệp tổng thầu trong thời gian tối đa 45 phải có biện pháp khắc phục và báo cáo về Bộ Lao động-Thương binh và Xã hội.

Đây là nội dung của công văn số 3905/KL-LĐTBXH do Bộ Lao động-Thương binh và Xã hội vừa ban hành về kết luận thanh tra việc chấp hành các quy định của pháp luật lao động tại Công ty hữu hạn Tập đoàn Cục 6 đường sắt Trung Quốc. Đây là đơn vị tổng thầu thi công toàn bộ tuyến đường sắt đô thị Hà Nội tuyến Cát Linh - Hà Đông.

Trả lương thấp và trốn đóng bảo hiểm xã hội

Thanh tra Bộ Lao động-Thương binh và Xã hội ông Phan Công Thọ cho biết, tổng số lao động của Công ty hữu hạn Tập đoàn Cục 6 đường sắt Trung Quốc đang làm việc tại công trình là 168 người, trong đó có 86 người Trung Quốc và 82 người Việt Nam.

Từ thời điểm khởi công dự án cho đến thời điểm thanh tra, doanh nghiệp này đã ký hợp đồng thi công xây dựng với 60 nhà thầu phụ để thực hiện công việc của dự án.

Quá trình thanh tra, Thanh tra Bộ Lao động-Thương binh và Xã hội đã phát hiện ra 16 sai phạm của đơn vị tổng thầu. Theo đó, công ty này đã không tuân thủ quy định về tiền lương, đóng bảo hiểm xã hội, ký kết hợp đồng lao động theo quy định của Luật Lao động.

Công ty hữu hạn Tập đoàn Cục 6 đường sắt Trung Quốc áp dụng mức lương tối thiểu thấp hơn mức lương tối thiểu vùng do nhà nước quy định. Qua kiểm tra 20 hợp đồng lao động, doanh nghiệp này đang áp dụng mức lương chính và tiền công là 3.000.000 đồng/tháng (mức lương tối thiểu vùng tại Hà Nội là 3.100.000 đồng/tháng). Công ty cũng chưa xây dựng thang lương, bảng lương, định mức lao động gửi về cơ quan chức năng.

Cũng theo kết luận thanh tra, đơn vị này chưa tham gia đóng bảo hiểm xã hội, bảo hiểm thất nghiệp cho 28/82 người thuộc đối tượng phải tham gia theo quy định.

Ngoài ra, hợp đồng lao động đã ký kết với người lao động có những nội dung không phù hợp với quy định tại Luật Lao động như: Chủ sử dụng lao động có thể hủy hợp đồng lao động trong trường hợp người lao động sinh con ngoài kế hoạch.

Lao lắp dầm tuyến đường sắt đô thị Cát Linh-Hà Đông. (Ảnh: PV/Vietnam+)

Vi phạm quy định về an toàn lao động

Trong đợt thanh tra, Thanh tra Bộ Lao động-Thương binh và Xã hội phát hiện công ty này chưa tiến hành kiểm định kỹ thuật an toàn lao động đối với 8 máy, thiết bị thuộc danh mục yêu cầu nghiêm ngặt về an toàn lao động theo quy định.

Doanh nghiệp cũng chưa thống kê đầy đủ số lao động làm các công việc có yêu cầu nghiêm ngặt về an toàn lao động, chưa báo cáo định kỳ về tình hình tai nạn lao động 6 tháng, hàng năm với cơ quan quản lý nhà nước về lao động địa phương, chưa khai báo với Sở Lao động-Thương binh và Xã hội thành phố Hà Nội khi sử dụng máy, thiết bị có yêu cầu nghiêm ngặt về an toàn lao động theo quy định.

Đơn vị tổng thầu cũng chưa tổ chức huấn luyện định kỳ về an toàn lao động, vệ sinh lao động cho đối tượng là người sử dụng lao động và người lao động theo quy định.

Do những sai phạm nêu trên, ông Phan Công Thọ cho biết, Bộ Lao động-Thương binh và Xã hội đã đưa ra 16 kiến nghị yêu cầu Công ty hữu hạn Tập đoàn Cục 6 đường sắt Trung Quốc khắc phục những sai phạm và thực hiện theo đúng quy định về pháp luật lao động.

Thanh tra Bộ Lao động-Thương binh và Xã hội yêu cầu đơn vị này trả lương đúng quy định, tham gia bảo hiểm xã hội, bảo hiểm thất nghiệp đầy đủ cho 100% lao động.

Về các thiết bị, máy, theo ông Phan Công Thọ, Bộ Lao động-Thương binh và Xã hội yêu cầu Công ty hữu hạn Tập đoàn Cục 6 đường sắt Trung Quốc khẩn trương tiến hành việc kiểm định kỹ thuật an toàn lao động. Đồng thời phải khai báo việc sử dụng 11 máy, thiết bị có yêu cầu nghiêm ngặt về an toàn lao động với Sở Lao động-Thương binh và Xã hội thành phố Hà Nội theo đúng các quy định của pháp luật.

Bên cạnh đó, đơn vị tổng thầu phải xây dựng phương án xử lý sự cố, ứng cứu khẩn cấp và tổ chức diễn tập các phương án xử lý sự cố đồng thời lập biên bản đánh giá kết quả diễn tập xử lý các tình huống giả định theo Điều 140 Bộ luật Lao động. Doanh nghiệp cũng phải tuân thủ các quy địnhvề báo cáo, thống kê lao động, tai nạn lao độ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.

fix-woocommerce-cart-01

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”

fix-woocommerce-cart-02Cuố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

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ùng

Và 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.sh

Và đợ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.

Cài đặt VestCPCài đặt VestCP

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.

cai-dat-vestacp-02

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.

vestacp-tao-user

Và nhập thông tin user cần tạo.

vestacp-tao-user-02

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.

vestacp-them-website

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.

vestacp-dns-rieng

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

vestacp-dns-rieng-02

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

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

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

.