post image

WordPress – Custom Taxonomies

Chào mọi người. Hôm nay tanlevis xin giới thiệu 1 chức năng rất hay của wordpress – Custom taxonomy.

Taxonomy là gì?
  • taxonomy là 1 cách để phân loại những bài viết trong wordpress, ví dụ các taxonomies mặc định của WP như: Categories, Post tags.
  • Taxonomy vô cùng quan trọng trong việc thể hiện những bài post trong wp theo ý muốn của mình, ví dụ như 1 shop thời trang nhỏ như http://www.valentineyogurt.com/test/
Ứng dụng

Trong bài viết này mình có demo những gì mình đã viết ở địa chỉ http://www.valentineyogurt.com/test/, các bạn có thể login vào để thử, user: test, pass: 123456.

custom taxonomies
Cách sử dụng

- Mở file function.php trong thư mục theme của bạn, thêm đoạn code sau vào phần cuối file (nhớ là trước dấu ?>)

.

// Custom taxonomy for Size
  register_taxonomy('Size', 'post',  array(
    'hierarchical' => true, 'label' => 'Size',
    'query_var' =>  true, 'rewrite' => true));

  // Custom taxonomy for Price
  register_taxonomy('Price', 'post',  array(
    'hierarchical' => false, 'label' => 'Price',
    'query_var'  => true, 'rewrite' => true));

  // Custom taxonomy for Brand
  register_taxonomy('Brand', 'post',  array(
    'hierarchical' => true, 'label' => 'Brand',
    'query_var'  => true, 'rewrite' => true));

function register_taxonomy($taxonomy, $object_type, $args = array()): có chức năng đăng ký 1 taxonomy mới.

$taxonomy: tên taxonomy (vd: Size).
$object_type: đối tượng mà taxonomy quản lý (vd: post, page, link, custom post type).
$args = array(): mảng các tham số như:
‘hierarchical’ => true | false: có được phân cấp như Categories hay không.
‘label’: Nhãn hiển thị trong option panel, vd: Size, Price, Brand. ..v..v.. các bạn có thể tham khảo tại đây: http://codex.wordpress.org/Function_Reference/register_taxonomy

Khi đăng ký xong hãy vào dashboard, vào mục Posts và hãy nhìn xem chúng ta có gì? Đó là 3 taxonomy với tên (Size, Price, Brand) vừa đăng ký ở trên. Chúng giống như quản lý Tags, hay là Categories vậy.

Hiển thị taxonomy: Mở file index.php, tìm đoạn code nơi xuất ra những bài post, thêm code dưới đây vào trong vòng loop:

//hiển thị hình ảnh sản phẩm
<?php if(has_post_thumbnail()):?>
 <div>
   <?php echo get_the_post_thumbnail($post->ID, 'post-thumbnail'); ?>"
 </div>
<?php endif;?>
//Hiển thị title
<h2 class="entry-title">
  <a href="<?php the_permalink(); ?>"      title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?>
  </a>
</h2>
<div>
 <?php echo get_the_term_list( $post->ID, 'Size', '<strong>Kích thước:</strong>', ', ', '' );?>
</div>
<div>
 <?php echo get_the_term_list( $post->ID, 'Brand', '<strong>Nhãn hiệu:</strong>', ', ', '' );?>
</div>
<div>
  <?php echo get_the_term_list($post->ID, 'Price', '<strong>Giá:</strong>', '', '');?>
</div>

function get_the_term_list($id = 0, $taxonomy, $before = ”, $sep = ”, $after = ”): hiện các taxonomy của bài viết này theo tên của taxonomy đã đăng ký.
$id: $post->ID, id hiện tại của 1 post.
$taxonomy: tên của taxonomy mình đã đăng ký, vd: Size, Price, Brand (lưu ý có phân biệt chữ hoa và thường).
$before: thẻ, ký tự trước khi xuất ra tên của taxonomy, vd: <strong>Giá:</strong>
$sep: dấu các giữa các taxonomy, vd dấy phẩy (,).
$after: thẻ, ký tự sau khi xuất ra tên của taxonomy, trong bài này mình để rỗng.

Giai đoạn cuối là post vài bài lên thử nghiệm và style css lại cho đẹp, trong demo này mình lấy theme 20 10 (twenty ten) mặc định cửa wp 3.0 và cũng không style lại cho giống shop thời trang lắm :D .

Kết luận

Theo mình thì taxonomy thực sự rất hay, và rất cần thiết cho việc tùy chỉnh wordpress làm việc theo ý mình. Mình đang có ý định viết 1 trang quản lý học sinh trên WP. Hy vọng sớm thành hiện thực. Tiện đây mình cũng xin giới thiệu luôn bài viết tiếp theo sẽ là Custom Post Type trong wp và sau nữa sẽ là một trang smallShop có sản phẩm, giỏ hàng và vài chi tiết khác. Nếu có thắc mắc hay đóng góp cải thiện thì mong các bạn comment ở bên dưới nha.

«

»

25 Comments

( Comment bài này )
  1. Nguyễn Luân says:

    Hi các bạn.
    mình có 1 thắc mắc không biết các bạn có ai gập phải và đã tìm được cách giải quyết chưa. mọi người cùng giúp mình nhé.
    mình sử dụng custom taxonomy tên là: typeproduct trong đó mình có thời trang nam, thời trang nữ. trong menu mình đưa thời trang nữ vào menu. nhưng khi mình click vào nó thì các bài viết không được hiển thị ra. mọi người cho mình hỏi làm thế nào để hiển thị các bài viết của 1 term thuộc custom taxonomy như ví dụ trên.
    nếu chỉ select ra thì ok. nhưng vấn đề là hiển thị thành 1 trang trong menu.
    mọi người giúp mình nhé.

  2. VDat says:

    Hay quá, nhờ đọc cái này ngộ ra 1 điều mà bấy lâu nay thắc mắc, cám ơn Izwebz nhiều lắm.

  3. Bài viết của bạn rất hay và bổ ích. Mình mới chỉ biết được mỗi cái hàm get_post_custom_values() mà đã đủ chế ra được 1 shop bán hàng đơn giản như trang somihanquoc.vn, somihanghieu.com rồi. Nay đọc được bài viết của bạn thấy có thể làm ra được nhiều tính năng khác nữa. Cám ơn sự chia sẻ rất hữu ích của bạn.

    Chúc bạn năm mới mạnh khỏe và có nhiều bài viết hữu ích cho cộng đồng nữa.

  4. - Đường link vào test bị lỗi bạn . Có thể fix link để mọi người cùng vào học hỏi được ko :) ?

    - Mình muốn hỏi là cũng cái thêm twentyten đó, giờ mình muốn hiển thị danh sách các sản phẩm giống như một shopping ý thì phải làm như thế nào vậy ? :)

  5. Mr.daklak says:

    mình đang xây dựng 1 site cho câu lạc bộ nhị khúc HCM , site mình xâu dựng cũng coi như hoàn thành 70% rồi còn vài chỗ chưa làm được mong bạn tanlevis và mọi người giúp tí .
    site của mình : nhikhucvn.host22.com
    đây là site chia sẽ thông tin,trong site mình muốn tạo 1 shop online để bán sán phẩm về nhị khúc nhưng chẳng biết bắt đầu từ như thế nào ? xài plugin nào là hợp lý nhất, nếu không xài plugin được không ?
    còn phần nữa là Forum cho mình hỏi có thể dùng các mã nguồn mở khác không ? chẳng hạn PHPBB ..
    bạn nào có kinh nghiệm trong vấn để này giúp mình với .
    Email : Mr.daklak@yahoo.com

  6. Các anh ơi có cách nào khi xuất taxonomy ra thì nó ko chèn vào thẻ mà chỉ xuất ra dạng text đc ko ạ.
    Em ví dụ: em gõ vào đó là
    http://domain.com vậy khi xuất ra là http://domain.com chứ ko phải là http://domain.com

  7. Hungcan says:

    Demon Warlock cho mình hỏi ngoài lề cái, bạn dùng codeBB nào để add được code dạng thẻ

     noi dung 

    , có thể bày cho mình cách chèn nó vào WordPress được không?

  8. Hungcan says:

    Chuẩn quá ! đang cần cái ni

    <html>
    <body>
    <form action="process.php" method="post"
    enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <br />
    <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>
    
  9. Duc Nguyen says:

    Àh quên còn cái code php lấy hình ra nè :

    
    <?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    mysql_select_db("data_name", $con);
    $result = mysql_query("SELECT * FROM hinh");
    while($row = mysql_fetch_array($result))
      {
      $pic = $row["hinh"];
      echo "<tr>";
      echo "<img src=\"$pic\" />";
      echo "</tr>";
      }
    echo "</table>";
    mysql_close($con);
    ?> 
    
  10. Duc Nguyen says:

    Qua hướng dẫn của anh demon mình làm được cách up hình vào folder, url vào database như sau :

    HTML FORM

    
    <html>
    <body>
    <form action="process.php" method="post"
    enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <br />
    <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>
     

    PHP CODE

    
    <?php
    	$conn=mysql_connect("localhost","root","") or die("can't connect your database");
    	mysql_select_db("data_name",$conn);
    
    		move_uploaded_file($_FILES['file']['tmp_name'],"upload/".$_FILES['file']['name']);
    		$url="upload/".$_FILES['file']['name'];
    		$sql="insert into hinh(pic) values('$url')";
    		mysql_query($sql,$conn);
    		echo "Upload Thanh cong";
    	mysql_close($conn);
    ?>
    
  11. Híc! cho code vô thẻ [ php] chú ơi [ /php] không chịu đọc kỹ hướng dẫn sử dụng trước khi dùng gì cả :P

  12. đoàn says:

    em làm xong tutorial rồi muốn up lên thì làm ntn hả anh dw ơi huhu!!

  13. ken.culu says:

    Mình thấy rất hay.!
    anh DW có thể làm video về trang thành viên:
    thành viên có quyền:
    post bài,
    sửa bài cũa mình.
    sửa hồ sơ.

    hoặc nếu ai biết thì mail cho mình với. mình loay hoay bữa giờ mà ko được.
    mail: ken.culu@gmail.com

    thank very.!

  14. Duc Nguyen says:

    Anh demon ơi , anh có thể làm 1 cái video hướng dẫn dùng code mysql insert 1 hình vào csdl, trong csdl lưu đường dẫn tới hình đó ( hình đó sẽ được lưu vào 1 folder )

    sau đó dùng code select trong csdl lấy ra đường dẫn đó, cắt đường dẫn làm sao cho nó vàdduwwocj folder chứa hình để lấy hình trong folder đó ra show lên trang web của mình

    em nghĩ thế có đúng ko các bạn ?

    • Anh có thể gợi ý để em làm như thế này.Người ta không lưu hình vào CSDL :D , mà người ta chỉ lưu đường dẫn tới file hình đó vào CSDL thôi.

      Sau khi em tạo script upload hình rồi thì lưu đường dẫn vào một biến $image_loc = “images/…..jpg”; chẳng hạn. Sau đó thì dùng câu lệnh SQL INSERT để lưu giá trị của biến này vào CSDL.

      Còn nếu muốn truy xuất nó ra thì cũng dùng mysqli_fetch_array() và chèn giá trị của biến $image_loc vào thuộc tính src của thẻ <img /> ví dụ:

      <img src="<?php echo $rows['image_name'];?>" alt="images" />
  15. MrV2m says:

    Chà, cái này mà dùng cho các trang WP bán hàng thì hay phết đấy.

  16. Duc Nguyen says:

    các bác cho gà em hỏi 1 tí, theo em học trong video của CK thì câu lênh mysql trong php là : mysql_query();

    còn xem trong video của bác demon thì là: mysqli_query();

    em mới tìm hiểu mysql nên còn gà lắm, mong bác nào giải thích hộ em rõ ah

    • nhtera says:

      MySQLi (MySQL improved) được phát triển để tận dụng lợi thế của các tính năng mới trong các hệ thống MySQL phiên bản 4.1.3 và mới hơn. Các mysqli tích hợp trong PHP 5 và phiên bản sau này.

      Việc mở rộng mysqli có một số lợi ích:

      +Object-oriented interface
      +Support for Prepared Statements
      +Support for Multiple Statements
      +Support for Transactions
      +Enhanced debugging capabilities
      +Embedded server suppor

      (Sưu tầm trên Internet)

  17. Hay lắm bạn, bóc tem trước nhá. Tiếp tục gửi những bài viết hay để IZWEBZ chúng ta ngày càng phong phú.

  1. BB
  2. BB
  3. BB

arrow

Lưu ý khi post comment:

  • Không "bóc tem" topic
  • Dùng lời lẽ có văn hoá và lịch sự
  • Xem trang FAQs trước khi hỏi
  • Bạn có thể dùng thẻ HTML như:<strong>, <em>, <a>
  • Đặt code trong thẻ [php],[html],[javascript],[css]

Chọn kiểu gõ: Tự động TELEX VNI Tắt