Các hàm và đối tượng thông dụng trong WordPress

Bài này thuộc phần 15 của 15 phần trong serie PHP cho WordPress Developer

Ở các bài trước của serie PHP cho WordPress Developer chắc bạn đã làm việc qua PHP khá nhiều rồi phải không, bạn cũng đã biết được rất nhiều vấn đề cơ bản trong PHP. Vậy thì ở bài này, hãy vận dụng các kiến thức đó vào việc xử lý một số hàm thông dụng trong WordPress mà khi bạn lập trình với nó bạn sẽ sử dụng rất nhiều, xin nhắc lại, rất nhiều.

Lưu ý: Nếu bạn cần biết thêm nhiều code trong WordPress, bạn có thể xem các bài viết WordPress Nâng Cao.

bloginfo() và get_bloginfo()

bloginfo() và get_bloginfo() là hàm lấy dữ liệu chung của website WordPress của bạn như tên website, đường dẫn website, phiên bản WordPress đang sử dụng,…Sở dĩ có hàm get_bloginfo() là vì hàm get chỉ hỗ trợ return, còn bloginfo() là nó in ra luôn.

Cấu trúc sử dụng: get_bloginfo( $show )

Trong đó, tham số show là tham số khai báo thành phần cần lấy ra, nó có một số tham số như sau:

  • 'name' : Tên của website thiết lập trong Setting -> General.
  • 'url' : Giá trị Site Address thiết lập trong Settings -> General.
  • 'wpurl' : Giá trị WordPress address trong Settings -> General.
  • 'description' : Giá trị của phần Tagline trong Settings -> General.
  • 'email' : Giá trị của phần Admin Email trong Settings -> General.
  • 'charset' : Giá trị charset trong Settings -> Reading.
  • 'version' : Phiên bản WordPress đang sử dụng.
  • 'language' : Mã ngôn ngữ của website đang sử dụng.
  • 'stylesheet_url' : Đường dẫn đến tập tin style.css của theme đang kích hoạt.
  • 'stylesheet_directory' : Đường dẫn của thư mục theme đang kích hoạt.
  • 'pingback_url' : Đường dẫn trỏ đến tập tin xmlrpc.php trên website.
  • 'atom_url' : Đường dẫn của trình cấp Atom trên website.
  • 'rdf_url' : Đường dẫn của trình cấp RDF trên website.
  • 'rss_url' : Đường dẫn của trình cấp RSS trên website.
  • 'rss2_url' : Đường dẫn của trình cấp RSS2 trên website.
  • 'comments_atom_url' : Đường dẫn trình cấp Atom của bình luận trên website.
  • 'comments_rss2_url' : Đường dẫn trình cấp RSS2 của bình luận trên website.

Ví dụ sử dụng:

Hiển thị tên website

<h1><?php bloginfo('name'); ?></h1>

hoặc sử dụng get_bloginfo()

<h1><?php echo get_bloginfo('name'); ?></h1>

hoặc sử dụng get_bloginfo() trong việc kiểm tra xem nó có dữ liệu chưa.

<?php
    if( get_bloginfo('name') ) :
        bloginfo('name');
    endif;
?>

Đối tượng $post

Đối tượng $post nó sẽ chứa toàn bộ dữ liệu của các post mà truy vấn trên website gửi về cơ sở dữ liệu. Ví dụ khi bạn ra trang chủ thì mặc định website sẽ có một truy vấn để lấy danh sách các bài viết mới nhất, hoặc khi vào một template nào đó như nội dung bài viết, page, category,..thì nó sẽ có một query riêng để lấy dữ liệu về.

Nên đọc qua: Tìm hiểu Query và Loop trong WordPress

Bây giờ ví dụ bạn thử dump đối tượng $post ở tập tin index.php của theme:

<?php
    echo '<pre>';
    var_dump( $post );
?>

Kết quả sẽ trả về kiểu như thế này (nếu bạn đang thiết lập trang chủ hiển thị các bài mới nhất):

object(WP_Post)#121 (24) {
  ["ID"]=>
  int(1)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2015-06-10 15:24:53"
  ["post_date_gmt"]=>
  string(19) "2015-06-10 15:24:53"
  ["post_content"]=>
  string(86) "Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!"
  ["post_title"]=>
  string(12) "Hello world!"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(11) "hello-world"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2015-06-10 15:24:53"
  ["post_modified_gmt"]=>
  string(19) "2015-06-10 15:24:53"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(37) "https://hocphp-thachpham92.c9.io/?p=1"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "1"
  ["filter"]=>
  string(3) "raw"
}

Từ đó, bạn có thể dựa vào đối tượng này mà lấy thông tin ra phù hợp như thế này:

<?php echo $post->post_title; ?>

Thế nhưng, bạn có một cách khác viết code gọn hơn đó là sử dụng các hàm template tags. Ví dụ để hiển thị tiêu đề của post trong đối tượng $post thì sẽ dùng template tag the_title().

Hint: Để xem query, hãy dump đối tượng $wp_query.

Lớp WP_Query

Khi bạn cần viết code để lấy danh sách các post mà bạn cần, thì bạn sẽ phải sử dụng đến lớp WP_Query (có thể dùng hàm get_posts() nhưng mình khuyên các bạn dùng WP_Query). Nó sẽ trả về kết quả là đối tượng chứa danh sách bài viết (giống $post).

Nên đọc qua: Tìm hiểu Query và Loop trong WordPress

Trong lớp này, bạn sẽ phải khai báo một số tham số cho nó để lấy bài viết ra theo ý mình. Ví dụ dưới đây là sẽ lấy 5 bài ngẫu nhiên.

$my_query = new WP_Query( 'posts_per_page=5&orderby=rand' );

Hoặc bạn có thể nhét tham số vào một biến riêng.

<?php
    $args = array(
        'posts_per_page'    => 5,
        'orderby'    => 'rand'
    );
    $the_query = new WP_Query( $args );
    var_dump( $my_query );
?>

Bạn có đối tượng $my_query rồi thì chỉ cần sử dụng vòng lặp while() để nó hiển thị ra toàn bộ dữ liệu là được.

<?php
    $args = array(
        'posts_per_page'    => 5,
    );
    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) {

        echo '<ul>';
        while ( $the_query->have_posts() ) {

            $the_query->the_post();
            echo '<li>' . get_the_title() . '</li>';
        }
        echo '</ul>';

    } else {
        // no posts found
    }

    /* Restore original Post Data */
    wp_reset_postdata();
?>

Hàm add_action() và add_filter()

Hai hàm này được sử dụng rất nhiều trong việc lập trình theme hoặc lập trình plugin. Muc đích của hai hàm này là can thiệp vào mã nguồn của WordPress hoặc mã nguồn của plugin/theme nào đó mà không cần sửa code trực tiếp trong mã nguồn.

Khái niệm action filter khá dài nên mình khuyên bạn đọc bài này.

Lớp WP_Widget

Nếu bạn cần tạo widget trong WordPress thì sẽ cần tạo một lớp khác kế thừa lại lớp này. Rất may là mình đã có bài hướng dẫn kèm video rất chi tiết tại đây.

Hàm register_nav_menus() và wp_nav_menu()

Nếu bạn muốn tạo thêm các vị trí menu trong WordPress (Menu Location) thì sẽ cần sử dụng hàm register_nav_menus(), cách sử dụng rất đơn giản, ví dụ dưới đây mình sẽ tạo ra thêm 3 menu location (code này nên đặt trong functions.php nhé).

<?php
    register_nav_menus( array(
        'menu-1' => 'Menu 1',
        'menu-2' => 'Menu 2',
        'menu-3' => 'Menu 3'
    ) );
?>

Và để hiển thị một menu location nào đó ra ngoài template, bạn có thể sử dụng hàm wp_nav_menu().

<?php wp_nav_menu( array( 'menu_location' => 'menu-1' ) );  ?>

Hàm get_post_meta()

Hàm này sẽ có chức năng lấy các dữ liệu meta (trong bảng wp_postmeta của database) trong một post nào đó ra bên ngoài. Về hàm này bạn sẽ xem hướng dẫn custom field của mình để hiểu rõ hơn.

Tra cứu hàm WordPress

Ở trên chỉ là một số hàm và đối tượng, class thường dùng trong WordPress mà thôi. Nếu bạn muốn xem đầy đủ hơn thì xem tại địa chỉ này.

Lời kết

Vậy là phần này bạn đã thao tác sơ sơ trên các code của WordPress, và mình nghĩ là bây giờ bạn đã hiểu nhiều hơn rồi đó. Và serie này mình viết dành cho những người muốn lập trình trong WordPress nên các kiến thức cơ bản tới đây bạn đã có đủ rồi, nên mình sẽ tạm dừng serie tại đây.

Bây giờ, việc của bạn là xem một số hướng dẫn cụ thể trong WordPress như Hướng dẫn lập trình theme WordPress và Hướng dẫn viết plugin xem thời tiết của Thachpham.com để bạn vận dụng các kiến thức đó vào thực tế tốt hơn. Mình tin là chỉ cần như vậy bạn sẽ dễ dàng nắm bắt được code trong WordPress rồi. Và nếu bạn cần hướng dẫn về code trong WordPres nhiều hơn nữa, hãy đọc các bài viết trong mục WordPress Development của mình.

Trong khi bạn làm việc với WordPress, mình khuyến khích bạn nên dành thời gian học thêm PHP, cụ thể là bạn nên học thêm PHP & MySQL vì nó sẽ có nhiều kiến thức khác sẽ giúp bạn sau này, và nên nắm vững ít nhất một PHP Framework như CodeIgniter, Laravel, Zend vì chỉ khi làm việc trên framework, bạn sẽ học được thêm nhiều cách viết code hay và biết thêm nhiều cái mới mẻ hơn.

Hy vọng với serie ngắn này, các bạn sẽ hiểu hơn về PHP và hiểu cách làm việc trong WordPress tốt hơn với ngôn ngữ PHP. Chúc bạn sớm thành công!

Thạch Phạm

AZDIGI's CEO. Đam mê công nghệ, WordPress, Server và xăm mình nữa.

Xem thêm bài viết Subscribe

Để lại bình luận

1 Bình luận trên "Các hàm và đối tượng thông dụng trong WordPress"

avatar
Sắp xếp theo:   mới nhất | cũ nhất | đánh giá nhiều
Luân
Khách
Em chào bác, Em muốn làm một website cho những bạn làm cùng cùng đăng bài lên để tham khảo, nói chung cần tầm 3 quyền gì đó(AM, MOD, MEM), vậy nên cần phân quyền tương đối chặt nên em đã chọn cái Plugin Utilmated member mà bác giới thiệu. Tuy nhiên em đang có vấn đề chỗ sửa thông tin cụ thể là ông MOD vào sửa thông tin của MEM thì dc sửa sang hẳn role MOD hay AM luôn :(. Em muốn sửa cái danh sách roles load ra phải có quyền nhỏ hơn của quyền hiện… Xem thêm »
wpDiscuz
menu
menu