[Lập trình theme WordPress] Viết code cho trang lưu trữ và 404 [NEW]



Một điều khá quan trọng nữa để theme hiển thị tốt là giao diện cho các trang lưu trữ. Các trang lưu trữ bao gồm các trang hiển thị các bài báo trong các đơn vị phân loại như Thẻ, Danh mục, Lưu trữ theo thời gian và thậm chí cả các trang của tác giả riêng lẻ.

Trong phần này, chúng ta sẽ viết mã cho 3 mẫu là archives.php, authorr.php, search.php và 404.php, trong đó:

  • archive.php – Mẫu chung cho phân loại.
  • tác giảr.php – Template cho trang riêng của từng tác giả, nếu không có tệp này thì sẽ tải tệp archive.php.
  • search.php Mẫu cho trang hiển thị kết quả tìm kiếm.
  • 404.php Mẫu hiển thị thông báo lỗi 404 trên trang web WordPress. Đừng nhầm nó với lỗi 404 của máy chủ web.

Mã cho archive.php

Đầu tiên, sao chép toàn bộ nội dung của trang index.php vào archive.php.

Sau đó, trong

chúng ta nên có đoạn mã sau đây để hiển thị tên kho 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>

Trong đoạn trên, tôi sử dụng các hàm có điều kiện của WordPress để kiểm tra truy vấn trên trang hiện tại mà nó đang thực thi. Nếu là thẻ thì sẽ in tên thẻ có chức năng single_tag_title()tương tự với các điều kiện khác.

Tiếp theo, chúng ta nên viết thêm một đoạn mã nữa để nó hiển thị mô tả của danh mục và thẻ nếu có.


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

Hàm term_description() tức là sẽ trả về giá trị mô tả của một thuật ngữ trong bất kỳ phép phân loại nào. Nếu nó không được tham số hóa, nó sẽ nhận được mô tả của thuật ngữ hiện tại theo ID, bởi vì mặc dù phân loại khác nhau, các thuật ngữ có một ID khác nhau.

Bây giờ chúng ta có toàn bộ mã như thế này với tệp 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(); ?>

Mã cho tác giả .php

Tập tin này là một phần của mẫu archive.php, nếu không tồn tại tập tin authorr.php nó sẽ tải tập tin archive.php, mục đích là hiển thị các bài viết của một tác giả dựa trên câu truy vấn đang được truy cập.

Ở trang này, ngoài việc hiển thị giống như index.php, tôi muốn nó có phần mô tả thông tin tác giả. Do đó, trước tiên bạn nên sao chép toàn bộ nội dung trong index.php vào:

Sau đó, trong

bạn chèn đoạn mã này ở 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 chức năng lấy thông tin của tác giả (người dùng) là chức năng get_the_author_meta(), bạn có thể xem thêm tại đây để biết thêm thông số lấy dữ liệu của người dùng. Sau khi chèn mã đó, chúng ta có toàn bộ mã tệp authorr.php 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 truy cập trang của một tác giả nào đó.

[Lập trình theme WordPress] Viết code cho trang lưu trữ và 404 [NEW]Mã cho search.php

Trang này cũng là một phần của archive.php, và được sử dụng để hiển thị kết quả tìm kiếm trên trang web nếu trang web đang sử dụng công cụ tìm kiếm mặc định của WordPress. Trước tiên, bạn cũng cần sao chép toàn bộ mã trong tệp index.php vào search.php, sau đó điều hướng đến

để chèn 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 mã trên, tôi đã tạo biến $ search_query với truy vấn tùy chỉnh qua lớp WP_Querytrong đó tôi 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 viết hiển thị là không giới hạn (thông số showposts với giá trị -1).

Hiện tại, tôi sẽ sử dụng biến $search_query trỏ đến đối tượng post_count vì đây là đối tượng trả về bao nhiêu kết quả trong truy vấn, điều này có nghĩa là kết quả được tìm thấy thông qua tìm kiếm.

Bây giờ toàn bộ tệp search.php chúng 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-end-search

Mã cho 404.php

Trong tệp này, chúng tôi sẽ muốn hiển thị thông báo rằng nội dung của trang này không tồn tại, cùng với hộp tìm kiếm và danh sách các thẻ, danh sách các danh mục có trong trang web. Trước tiên, bạn cũng nên sao chép nội dung của tệp index.php vào 404.php, sau đó chúng tôi xóa mã hiển thị truy vấn như sau:

[html]


[/html]

Bây giờ chúng ta sẽ có bên trong phần # chính-nội dung. Bạn viết mã này trong:


<?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ộ tệp mã 404.php bây giờ chúng 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(); ?>

Để kiểm tra, bạn có thể gõ địa chỉ http: // localhost / website /? P = 696969 để gặp thông báo lỗi.

Phần kết

Như vậy tại thời điểm này, trang web của bạn cũng hiển thị đầy đủ nội dung khi truy cập vào các trang lưu trữ như danh mục, thẻ, 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 tôi đã làm cho trang hiển thị kết quả tìm kiếm trên trang web phù hợp hơn.

Nhưng bây giờ bạn có thấy rằng trang web của chúng ta đang thiếu một thành phần quan trọng không? Đúng vậy, nó đang thiếu sidebar nên trong phần tiếp theo chúng ta sẽ code cho sidebar.php để theme hoàn thiện hơn.

Đánh giá nội dung này

Tiếp tục đọc trong bộ truyện