Viết code cho các trang lưu trữ

[Lập trình theme WordPress] Thêm chức năng Theme Options

Một việc khá quan trọng nữa để một theme có thể hiển thị tốt đó là giao diện cho các trang lưu trữ (archive). Các trang lưu trữ bao gồm các trang hiển thị các bài viết trong taxonomies như Tag, Category, Lưu trữ theo thời gian và cả trang riêng của từng tác giả.

Trong phần này, chúng ta sẽ code cho 3 template đó là archives.php, author.php, search.php và 404.php, trong đó:

  • archive.php – Template chung dành cho các taxonomy.
  • author.php – Template dành cho trang riêng của từng tác giả, nếu không có file này nó sẽ load file archive.php.
  • search.php – Template dành cho trang hiển thị kết quả tìm kiếm.
  • 404.php – Template hiển thị thông báo lỗi 404 trên website WordPress. Bạn đừng nhầm lẫn với lỗi 404 của webserver nhé.

Code cho trang archive.php

Trước tiên bạn hãy copy toàn bộ nội dung ở trang index.php vào archive.php.

Sau đó ở phần <section id=”main-content”>, chúng ta nên có một đoạn sau ở trên đầu nó để hiển thị tên trang lưu trữ hiện tại mà họ đang xem.


	<div class="archive-title">
		<h2>
			<?php
				if ( is_tag() ) :
					printf( __('Posts Tagged: %1$s','thachpham'), single_tag_title( '', false ) );
				elseif ( is_category() ) :
					printf( __('Posts Categorized: %1$s','thachpham'), single_cat_title( '', false ) );
				elseif ( is_day() ) :
					printf( __('Daily Archives: %1$s','thachpham'), get_the_time('l, F j, Y') );
				elseif ( is_month() ) :
					printf( __('Monthly Archives: %1$s','thachpham'), get_the_time('F Y') );
				elseif ( is_year() ) :
					printf( __('Yearly Archives: %1$s','thachpham'), get_the_time('Y') );
				endif;
			?>
		</h2>
	</div>

Ở đoạn trên, mình sử dụng các hàm điều kiện của WordPress để kiểm tra query trên trang hiện tại nó đang thực thi. Nếu nó là tag thì sẽ in tên của tag ra với hàm single_tag_title(), tương tự với các điều kiện khác.

Kế tiếp, chúng ta nên viết thêm một đoạn code nữa để nó hiển thị mô tả của category và tag nếu có nhé.


	<?php if ( is_tag() || is_category() ) : ?>
		<div class="archive-description">
			<?php echo term_description(); ?>
		</div>
	<?php endif; ?>

Hàm term_description() nghĩa là sẽ trả về giá trị mô tả của một term trong bất kỳ taxonomy nào. Nếu nó không được thiết lập tham số thì sẽ lấy mô tả của term hiện tại theo ID, bởi vì dù có khác taxonomy nhưng các term đều có một ID khác nhau.

Bây giờ chúng ta có toàn bộ code như thế này với file archive.php:


<?php get_header(); ?>

<div id="content">

	<div class="archive-title">
		<h2>
			<?php
				if ( is_tag() ) :
					printf( __('Posts Tagged: %1$s','thachpham'), single_tag_title( '', false ) );
				elseif ( is_category() ) :
					printf( __('Posts Categorized: %1$s','thachpham'), single_cat_title( '', false ) );
				elseif ( is_day() ) :
					printf( __('Daily Archives: %1$s','thachpham'), the_time('l, F j, Y') );
				elseif ( is_month() ) :
					printf( __('Monthly Archives: %1$s','thachpham'), the_time('F Y') );
				elseif ( is_year() ) :
					printf( __('Yearly Archives: %1$s','thachpham'), the_time('Y') );
				endif;
			?>
		</h2>
	</div>
	<?php if ( is_tag() || is_category() ) : ?>
		<div class="archive-description">
			<?php echo term_description(); ?>
		</div>
	<?php endif; ?>

	<section id="main-content">
		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<?php get_template_part( 'content', get_post_format() ); ?>
		<?php endwhile; ?>
		<?php thachpham_pagination(); ?>
		<?php else : ?>
			<?php get_template_part( 'content', 'none' ); ?>
		<?php endif; ?>
	</section>
	<section id="sidebar">
		<?php get_sidebar(); ?>
	</section>

</div>

<?php get_footer(); ?>

Code cho author.php

File này là một phần trong template archive.php, nếu file author.php không tồn tại thì nó sẽ load file archive.php ra, mục đích là hiển thị các bài viết của một tác giả dựa theo truy vấn đang truy cập.

Ở trang này, ngoài việc hiển thị giống như index.php thì mình sẽ muốn nó có thêm mô tả về thông tin tác giả. Do vậy, trước tiên bạn cần nên copy toàn bộ nội dung trong index.php vào:

Sau đó ở đoạn <section id=”main-content”>, bạn chèn đoạn này vào bên trên để hiển thị thông tin tác giả hiện tại mà truy vấn đang thực thi:


	<div class="author-box"><?php
		// Hiển thị avatar của tác giả
		echo '<div class="author-avatar">'. get_avatar( get_the_author_meta( 'ID' ) ) . '</div>';

		// hiển thị tên tác giả
		printf( '<h3>'. __( 'Posts by %1$s', 'thachpham' ) . '</h3>', get_the_author() );

		// Hiển thị giới thiệu của tác giả
		echo '<p>'. get_the_author_meta( 'description' ) . '</p>';

		// Hiển thị field website của tác giả
		if ( get_the_author_meta( 'user_url' ) ) : printf( __('<a href="%1$s" title="Visit to %2$s website">Visit to my website</a>', 'thachpham'),
			get_the_author_meta( 'user_url' ), get_the_author() );
		endif;
	?></div>

Trong đó, các hàm lấy thông tin của tác giả (user) là hàm get_the_author_meta(), bạn có thể xem thêm tại đây để biết thêm các tham số lấy dữ liệu của user. Sau khi chèn thêm code đó, ta có toàn bộ code file author.php là như sau:


<?php get_header(); ?>

<div id="content">
	<div class="author-box"><?php
		// Hiển thị avatar của tác giả
		echo '<div class="author-avatar">'. get_avatar( get_the_author_meta( 'ID' ) ) . '</div>';

		// hiển thị tên tác giả
		printf( '<h3>'. __( 'Posts by %1$s', 'thachpham' ) . '</h3>', get_the_author() );

		// Hiển thị giới thiệu của tác giả
		echo '<p>'. get_the_author_meta( 'description' ) . '</p>';

		// Hiển thị field website của tác giả
		if ( get_the_author_meta( 'user_url' ) ) : printf( __('<a href="%1$s" title="Visit to %2$s website">Visit to my website</a>', 'thachpham'),
			get_the_author_meta( 'user_url' ), get_the_author() );
		endif;
	?></div>
	<section id="main-content">
		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<?php get_template_part( 'content', get_post_format() ); ?>
		<?php endwhile; ?>
		<?php thachpham_pagination(); ?>
		<?php else : ?>
			<?php get_template_part( 'content', 'none' ); ?>
		<?php endif; ?>
	</section>
	<section id="sidebar">
		<?php get_sidebar(); ?>
	</section>

</div>

<?php get_footer(); ?>

Kết quả sẽ như thế này khi vào xem trang của một tác giả nào đó.

laptrinhtheme-finish-authortemplateCode cho search.php

Trang này cũng là một phần của archive.php luôn, và có công dụng hiển thị kết quả tìm kiếm trên website nếu website đang sử dụng trình tìm kiếm mặc định của WordPress. Trước tiên, bạn cũng cần copy toàn bộ code ở file index.php vào search.php, rồi tìm đến <section id=”main-content”> để chèn thêm vào phía trên đoạn dưới đây để hiển thị thông tin về truy vấn tìm kiếm.


	<div class="search-info">
		<!--Sử dụng query để hiển thị số kết quả tìm kiếm được tìm thấy
			Cũng như hiển thị từ khóa tìm kiếm. Từ khóa tìm kiếm cũng
			có thể hiển thị được với hàm get_search_query()-->
		<?php
			$search_query = new WP_Query( 's=".$s."&showposts=-1' );
			$search_keyword = wp_specialchars( $s, 1);
			$search_count = $search_query->post_count;
			// var_dump( $search_query );
			printf( __('Search results for <strong>%1$s</strong>. We found <strong>%2$s</strong> articles for you.', 'thachpham'), $search_keyword, $search_count );
		?>
	</div>

Trong đoạn trên, mình tạo ra một biến $search_query với query tùy chỉnh thông qua class WP_Query, trong đó là mình sẽ có tham số lấy bài theo từ khóa tìm kiếm (tham số s) và số lượng bài cần hiển là không giới hạn (tham số showposts với giá trị -1).

Lúc này, mình sẽ sử dụng biến $search_query trỏ tới đối tượng post_count vì đây là đối tượng trả về có bao nhiêu kết quả trong query, ở đây nghĩa là các kết quả tìm được thông qua tìm kiếm.

Bây giờ toàn bộ file search.php ta có như sau:


<?php get_header(); ?>

<div id="content">
	<div class="search-info">
		<!--Sử dụng query để hiển thị số kết quả tìm kiếm được tìm thấy
			Cũng như hiển thị từ khóa tìm kiếm. Từ khóa tìm kiếm cũng
			có thể hiển thị được với hàm get_search_query()-->
		<?php
			$search_query = new WP_Query( 's=".$s."&showposts=-1' );
			$search_keyword = wp_specialchars( $s, 1);
			$search_count = $search_query->post_count;
			//var_dump( $search_query );
			printf( __('Search results for <strong>%1$s</strong>. We found <strong>%2$s</strong> articles for you.', 'thachpham'), $search_keyword, $search_count );
		?>
	</div>
	<section id="main-content">
		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<?php get_template_part( 'content', get_post_format() ); ?>
		<?php endwhile; ?>
		<?php thachpham_pagination(); ?>
		<?php else : ?>
			<?php get_template_part( 'content', 'none' ); ?>
		<?php endif; ?>
	</section>
	<section id="sidebar">
		<?php get_sidebar(); ?>
	</section>

</div>

<?php get_footer(); ?>

Kết quả:

 laptrinhtheme-finish-search

Code cho 404.php

Ở file này, chúng ta sẽ muốn hiển thị một thông báo nội dung của trang này không tồn tại, kèm theo đó là một khung tìm kiếm và danh sách các tags, danh sách các categories có trong website. Trước tiên bạn cũng cần nên copy nội dung file index.php vào 404.php, và sau đó chúng ta xóa bớt các đoạn code hiển thị query thành thế này:


<?php get_header(); ?>

<div id="content">

	<section id="main-content">

	</section>
	<section id="sidebar">
		<?php get_sidebar(); ?>
	</section>

</div>

<?php get_footer(); ?>

Bây giờ chúng ta sẽ có bên trong phần #main-content nhé. Bạn viết code này vào:


		<?php
			_e('<h2>404 NOT FOUND</h2>', 'thachpham');
			_e('<p>The article you were looking for was not found, but maybe try looking again!</p>', 'thachpham');

			get_search_form();

			_e('<h3>Content categories</h3>', 'thachpham');
			echo '<div class="404-catlist">';
			wp_list_categories( array( 'title_li' => '' ) );
			echo '</div>';

			_e('<h3>Tag Cloud</h3>', 'thachpham');
			wp_tag_cloud();
		?>

Và toàn bộ code file 404.php bây giờ ta có:


<?php get_header(); ?>

<div id="content">

	<section id="main-content">
		<?php
			_e('<h2>404 NOT FOUND</h2>', 'thachpham');
			_e('<p>The article you were looking for was not found, but maybe try looking again!</p>', 'thachpham');

			get_search_form();

			_e('<h3>Content categories</h3>', 'thachpham');
			echo '<div class="404-catlist">';
			wp_list_categories( array( 'title_li' => '' ) );
			echo '</div>';

			_e('<h3>Tag Cloud</h3>', 'thachpham');
			wp_tag_cloud();
		?>
	</section>
	<section id="sidebar">
		<?php get_sidebar(); ?>
	</section>

</div>

<?php get_footer(); ?>

Để test, bạn có thể gõ địa chỉ kiểu https://localhost/website/?p=696969 là sẽ ra thông báo lỗi.

Lời kết

Vậy là tới đây, website của bạn cũng đã hiện ra nội dung đầy đủ khi vào các trang lưu trữ như category, tag, trang tác giả hay thậm chí là trang lưu trữ theo thời gian của WordPress. Đồng thời, chúng ta đã làm cho trang hiển thị kết quả tìm kiếm trên website phù hợp hơn.

Nhưng mà bây giờ bạn có thấy website chúng ta bị thiếu đi một thành phần quan trọng không? Đúng rồi, nó đang thiếu sidebar, vậy thi ở phần sau chúng ta sẽ code cho sidebar.php để theme hoàn thiện hơn nha.

Nguồn: Viết code cho các trang lưu trữ | Thạch Phạm

Categories: Content Marketing, Digital Marketing, Google Ads, Kinh doanh, PHP, SEO, Server - Hosting, WordPress, WordPress Development, Wordpress Plugin, WordPress Theme, Wordpress Tutorial,
Tags: baemin, bán hàng online, bán hàng online trên facebook, bán hàng qua facebook, bán hàng quần áo, bán hàng thời trang, bán hàng trên baemin, bán hàng trên facebook, bán hàng trên fanpage, bán hàng trên grab, bán hàng trên marketplace, bán hàng trên now, bán hàng trên tiktok, báo cáo kết quả hoạt động kinh doanh, bí quyết kinh doanh online, bít tết Âu việt, black friday, buôn bán hàng thùng, buôn bán hàng thùng tuyển chọn, cách bán hàng online đắt khách, cách bán hàng trên marketplace, cách bán hàng trên tiktok, câu chuyện kinh doanh, câu chuyện thành công, chương trình khuyến mãi, công nghệ phần mềm bán hàng, cửa hàng cafe, cửa hàng minh tuấn mobile, cửa hàng phụ kiện, cửa hàng thời trang, cửa hàng thực phẩm, cửa hàng thực phẩm sạch, doanh số bán hàng, dox garage & coffee, dox garage &amp; coffee, đăng ký bán hàng trên baemin, đăng ký bán hàng trên go food, đăng ký bán hàng trên grab, đăng ký bán hàng trên now, facebook, facebook pos, fanpage, file excel, file excel báo cáo kết quả kinh doanh, file excel quản lý kho, foodngon, go food, go jek, grab, halo mobile, khởi nghiệp, khởi nghiệp kinh doanh, khởi nghiệp kinh doanh thời trang, kinh doanh cafe, kinh doanh điện thoại, kinh doanh điện tử điện máy, kinh doanh đồ handmade, kinh doanh gì sau dịch, kinh doanh mỹ phẩm, kinh doanh mỹ phẩm online, kinh doanh nhà hàng, kinh doanh online, kinh doanh phụ kiện, kinh doanh quán cafe, kinh doanh shop thời trang, kinh doanh siêu thị mini, kinh doanh spa, kinh doanh thành công, kinh doanh thời trang, kinh doanh thời trang trẻ em, kinh doanh thực phẩm, kinh doanh thực phẩm sạch thành công, kinh doanh trên facebook, kinh doanh trên grab, kinh nghiệm bán hàng, kinh nghiệm kinh doanh, làm đồ handmade, lily shop, link kháng tài khoản quảng cáo, lụa tơ tằm bá minh, marketing online, mặt hàng dễ bán, mẹo bán hàng, mẹo bán hàng trên facebook, mẹo hay, ngày black friday năm 2020 là ngày nào?, now, now - foody, phầm mềm quản lý bán hàng miễn phí, phần mềm chốt đơn, phần mềm chốt đơn hàng, phần mềm miễn phí, phần mềm pos, phần mềm quản lý bán hàng, phần mềm quản lý bán hàng đáng tin cậy, phần mềm quản lý bán hàng miễn phí, phụ kiện ben & tony, phụ kiện ben &amp; tony, phụ kiện hà xinh, quán cafe hiệu quả, quản lý cửa hàng, quản lý cửa hàng thời trang, quản lý nhà hàng, quản lý nhân viên, quản lý nhân viên cứng đầu, quản lý nhân viên thời vụ, quảng cáo thương hiệu, shop thời trang, shopee, siêu thị minimart, status, status bán hàng, status quảng cáo mỹ phẩm, stella spa, stt bán hàng online hài hước, stt tương tác bán hàng, t.u.s shop, tài khoản bị vô hiệu hóa, tài khoản facebook, tài khoản facebook bị vô hiệu hóa, tải miễn phí file excel quản lý kho, tăng doanh thu mùa black friday, thời trang kosta, thời trang mine, thời trang tú trần shop, thực phẩm sạch, thực phẩm sạch 02, thực phẩm sạch tâm an, thuê mặt bằng kinh doanh, tiki, tiktok, tú trần shop,
Review LiquidWeb – Hosting chất lượng cực tốt
Thêm sản phẩm bên ngoài cho Woocommerce
Tác giả

Bình luận

buy tofranil

My husband and i felt absolutely ecstatic Edward could do his reports through your precious recommendations he had through the web pages. It is now and again perplexing to just find yourself handing out secrets and techniques which people may have been selling. So we keep in mind we have got the writer to give thanks to for that. The most important illustrations you have made, the simple web site navigation, the relationships you will help to foster – it’s got many overwhelming, and it’s really leading our son in addition to the family know that the situation is exciting, which is rather mandatory. Thank you for everything!

MarcosFeshy

tadalafil 40 mg daily: https://tadalafilonline20.com/ tadalafil dosage

Leave a Message

Registration isn't required.

NguyenLp LarTheme