Sắp xếp giá trị bài viết theo thứ tự bảng chữ cái cho mỗi chữ cái Wordpress

Thảo luận trong 'Mã nguồn mở Wordpress' bắt đầu bởi seolagi, 17/11/21.

  1. seolagi

    seolagi

    Moderator

    Thành viên BQT

    Tham gia ngày:
    16/4/14
    Bài viết:
    851
    Đã được thích:
    72
    Điểm thành tích:
    28
    Sắp xếp giá trị bài viết theo thứ tự bảng chữ cái cho mỗi chữ cái Wordpress, Wordpress posts ordering by alphabetical for each letter, Order in alphabetical order in wordpress, PHP Order in alphabetical order

    Sắp xếp giá trị theo bảng chữ cái A, B, C, D.... group dữ liệu lại, cái nào chứ giống nhau gôm vô 1 chỗ, giống hình dưới.

    Câu hỏi của bạn Hiếu gửi vào fanpage của itseovn.com. Mình đã từng làm qua, nên copy code hướng dẫn các bạn nào cần thì vào lấy nhé.

    sap-xep-du-lieu-abc.png

    PHP:
    <?php
    function locdautiengviet($str){
        
    $unicode = array(
        
    'a'=>'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',
        
    'd'=>'đ',
        
    'e'=>'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
        
    'i'=>'í|ì|ỉ|ĩ|ị',
        
    'o'=>'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
        
    'u'=>'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
        
    'y'=>'ý|ỳ|ỷ|ỹ|ỵ',
        
    'A'=>'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',
        
    'D'=>'Đ',
        
    'E'=>'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',
        
    'I'=>'Í|Ì|Ỉ|Ĩ|Ị',
        
    'O'=>'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',
        
    'U'=>'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',
         
    'Y'=>'Ý|Ỳ|Ỷ|Ỹ|Ỵ',
         );
         foreach(
    $unicode as $nonUnicode=>$uni){
                
    $str preg_replace("/($uni)/i"$nonUnicode$str);
         }
         
    $str str_replace(' ','_',$str);
          return 
    $str;
    }
    $posts get_posts(
        array(
            
    'post_type' => 'post',
            
    'post_status' => 'publish',
            
    'posts_per_page' => -1,
            
    'orderby' => 'title',
            
    'order' => 'ASC',
        )
    );
    $alphas range('A''Z');
    $letter_keyed_posts = array();
    if ( 
    $posts ) {
        foreach ( 
    $posts as $post ) {
            
    $first_letter strtouppersubstr$post->post_title0) );    
            
    $first_letter locdautiengviet($first_letter); //xử lý cho tiếng việt nếu là Â Ê Đ,... sẽ gộp vào chung với các ký tự không dấu. VD: Ê gộp chung vào E, Đ gộp chung vào D
            
    if ( ! array_key_exists$first_letter$letter_keyed_posts ) ) {
                
    $letter_keyed_posts$first_letter ] = array();
            }
             
    $letter_keyed_posts$first_letter ][] = $post;
        }
    }
    foreach (
    $letter_keyed_posts as $key => $value) {
        
    ?>
        <table class="table">
          <caption><h2 class="text-left">List of --> <?php echo $key.'('.count($value).')'?></h2></caption>
          <thead>
            <tr>
              <th scope="col">#</th>
              <th scope="col">Title</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($value as $val) {
                
    ?>
                <tr>
                  <th scope="row"><?php echo $val->ID?></th>
                  <td><a href="<?php echo get_permalink$val->ID ); ?>"><?php echo $val->post_title?></a></td>
                </tr>
                <?php
            
    ?>
          </tbody>
        </table>
        <?php
    }
    ?>
    Hoặc
    PHP:
    $terms get_terms( array(
        
    'taxonomy' => 'pa_hoat-chat',
        
    'hide_empty' => false//chỉ lấy hoạt chất có sản phẩm thì chỉnh thành true, false là lấy tất cả
      
    ) );

    $temp_char""// temporary variable, initially blank;
    foreach($terms as $term)
    {
        
    $album_name$term->name;

        
    $first_char_of_albm$album_name[0]; // this will store first alphabet;

        
    $first_char_of_albmstrtoupper($first_char_of_albm); // make uppercase or lower as per your needs

        
    if($temp_char!=$first_char_of_albm)
        {
            echo 
    $first_char_of_albm.'<br />';

            
    $temp_char$first_char_of_albm// update $temp_char variable
        
    }
        echo 
    $album_name.'<br />';
    }
     
    Cảm ơn đã xem bài:

    Sắp xếp giá trị bài viết theo thứ tự bảng chữ cái cho mỗi chữ cái Wordpress

    Last edited by a moderator: 19/11/21
  2. DienDanRaoVat

    DienDanRaoVat

    Vip Member

    Tham gia ngày:
    14/2/14
    Bài viết:
    169
    Đã được thích:
    5
    Điểm thành tích:
    18
    Cảm ơn itseovn nhé, hỏi facebook tùm lum, chỉ được ba cái trả lời (...ẩn bởi @admin). Hỏi itseovn hơi lâu trả lời mà lúc nào cũng đúng 100%, em đã làm thành công.
     
  3. admin

    admin Phạm Công Sơn Thành viên BQT

    Tham gia ngày:
    22/5/13
    Bài viết:
    4,521
    Đã được thích:
    1,095
    Điểm thành tích:
    113
    Giới tính:
    Nam
    @seolagi sao em không đưa cái code có style css và code em làm cho cái brand lần trước, cái đó a thấy đẹp và hoàn thiện hơn. Có sẵn css cho các bạn không biết làm áp dụng tiện hơn.
     
    seolagi thích bài này.
  4. seolagi

    seolagi

    Moderator

    Thành viên BQT

    Tham gia ngày:
    16/4/14
    Bài viết:
    851
    Đã được thích:
    72
    Điểm thành tích:
    28
    Ah xin lỗi, quên nhắc tới người chỉ mình lần trước làm Code, trên là code gốc của @admin chỉ mình, còn code của mình là lấy dữ liệu trường taxonomy (các thuộc tính) để tạo 1 thuộc tính mới, của woocommerce, trước mình làm cái brand từ taxonomy thuộc tính, sau đó mình muốn xuất dạng lọc danh sách tất cả các thuộc tính của brand thương hiệu ra dưới dạng danh sách theo ký tự A B C.

    Tạo code bằng cách tạo 1 file thuonghieu.php sau đó add code sau vào:
    PHP:
    <?php
    /*
    Template Name: Thuong hieu (brand)
    */
    get_header();

    function 
    locdautiengviet($str){
        
    $unicode = array(
        
    'a'=>'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',
        
    'd'=>'đ',
        
    'e'=>'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
        
    'i'=>'í|ì|ỉ|ĩ|ị',
        
    'o'=>'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
        
    'u'=>'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
        
    'y'=>'ý|ỳ|ỷ|ỹ|ỵ',
        
    'A'=>'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',
        
    'D'=>'Đ',
        
    'E'=>'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',
        
    'I'=>'Í|Ì|Ỉ|Ĩ|Ị',
        
    'O'=>'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',
        
    'U'=>'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',
         
    'Y'=>'Ý|Ỳ|Ỷ|Ỹ|Ỵ',
         );
         foreach(
    $unicode as $nonUnicode=>$uni){
                
    $str preg_replace("/($uni)/i"$nonUnicode$str);
         }
         
    $str str_replace(' ','_',$str);
          return 
    $str;
    }

    $terms get_terms( array(
        
    'taxonomy' => 'pa_thuong-hieu',
        
    'hide_empty' => false//chỉ lấy hoạt chất có sản phẩm thì chỉnh thành true, false là lấy tất cả
      
    ) );

    $alphas range('A''Z');
    $letter_keyed_posts = array();
    if ( 
    $terms ) {
        foreach ( 
    $terms as $post ) {
            
    $first_letter strtouppermb_substr$post->name0) );
            
    $first_letter locdautiengviet($first_letter);
            if ( ! 
    array_key_exists$first_letter$letter_keyed_posts ) ) {

                
    $letter_keyed_posts$first_letter ] = array();
            }

            
    $letter_keyed_posts$first_letter ][] = $post;
        }
    }
    $page_id get_queried_object_id();
    $yoast_title get_post_meta($page_id'_yoast_wpseo_title'true);
    $title strstr($yoast_title'%%'true);
    if (empty(
    $title)) {
        
    $title get_the_title($page_id);
    }

    $tocitem "";
    ?>
    <div class="cs-mainall">
        <div class="cs-container">
            <div id="breadcroumb" class="cs-breadcroumb">
                <ol>
                    <li><a href="/">Trang chủ</a></li>
                    <li><span class="divider">/</span> <a href="/thuong-hieu"><span>Thương hiệu</span></a></li>
                </ol>
            </div>
            <div class="cs-main-content">
                <div class="cs-ss-main-content">
                    <div class="cs-page-header">
                        <h1 class="cs-titlepage">
                            <?php echo 'Có <b>'.count($terms).'</b> '.$title?>
                        </h1>
                    </div>
                    <div class="cs-maincontent">
                        <?php foreach ($letter_keyed_posts as $key => $value) {
                            
    $tocitem .= '<li><a href="#thuong-hieu-'.$key.'">'.$key.'</a></li>';
                        
    ?>    
                        <h2 id="thuong-hieu-<?php echo $key ?>"><?php echo $key.'<i>('.count($value).')</i>'?></h2>
                        <ul>
                            <?php foreach ($value as $val) { ?>
                                <li>
                                    <a href="<?php echo $val->slug?>"><?php echo $val->name?></a>
                                </li>
                            <?php ?>
                        </ul>
                        <?php  }  ?>
                    </div>
                    <div class="cs-footeritem">
                        <ul>
                            <?php echo $tocitem?>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <?php
    get_footer
    ();
    • Với pa_thuong-hieu là cái taxonomy của bạn nhé.
    thuoc-tinh.jpg

    Add thêm style css vào web để có giao diện đẹp:

    Mã:
    /* danh sach thuong hieu css */
    .cs-mainall .cs-ss-main-content{
    display: flex;
    flex-direction: column;
    }
    .cs-mainall .cs-ss-main-content .cs-page-header
    {
    order: 1;
    }
    .cs-mainall .cs-ss-main-content .cs-maincontent
    {
    order:3;
    }
    .cs-mainall .cs-ss-main-content .cs-footeritem
    {
    order: 2;
    }
    .cs-mainall .cs-footeritem ul {
        padding-top: 10px;
        border-top: 1px solid #ececec;
        border-bottom: 1px solid #ececec;
        margin-bottom: 20px;
    }
    .cs-mainall .cs-footeritem li
    {
    display: inline-block;
    font-size: 22px;
    margin: 0 0 10px 0;
    padding: 0 30px 0 0;
    color: #4b53e0;
    }
    .cs-mainall .cs-footeritem li > a {
        font-size: 22px;
        color: #4b53e0;
    }
    .cs-mainall .cs-maincontent ul
    {
    padding-top: 10px;
    border-top: 1px solid #ececec;
    border-bottom: 1px solid #ececec;
    margin-bottom: 20px;
    }
    .cs-mainall .cs-maincontent li
    {
    display: inline-block;
    font-size: 16px;
    margin: 0 0 10px 0;
    padding: 0 30px 0 0;
    color: #000;
    }
    .cs-mainall .cs-maincontent a
    {
    color: #000;
    }
    .cs-mainall
    {
    max-width: 1200px;
    margin: 0 auto;
    padding-left: 15px;
    padding-right: 15px;
    }
    .cs-mainall .cs-maincontent h2 i
    {
    font-size: 12px;
    font-style: normal;
    color: #000;
    vertical-align: 3px;
    margin-left: 7px;
    }
    .cs-mainall .cs-maincontent h2 {
        font-size: 22px;
        font-weight: bold;
        color: #4b53e0;
    }
    .cs-mainall .cs-titlepage
    {
    font-size: 24px;
    font-weight: bold;
    }
    .cs-mainall .cs-titlepage b
    {
    color:red;
    }
    .cs-mainall .cs-breadcroumb
    {
    padding: 10px 5px 7px 10px;
    background-color: #fff;
    margin-top: 20px;
    border-radius: 2px;
    border: 1px solid #eee;
    margin-bottom: 20px;
    }
    .cs-mainall .cs-main-content
    {
    background-color: #fff;
    padding: 15px 15px;
    margin-bottom: 20px;
    }
    .cs-mainall .cs-breadcroumb ol
    {
    margin-bottom: 0px;
    }
    .cs-mainall .cs-breadcroumb a
    {
    color: #4b53e0;
    text-decoration: none;
    padding-right: 10px;
    }
    .cs-mainall .cs-breadcroumb span
    {
    color: #333;
    text-decoration: none;
    padding-right: 10px;
    }
    .cs-mainall .cs-breadcroumb li
    {
    list-style: none;
    display: inline;
    }
    /* end danh sach thuong hieu css */
    Bạn muốn chỉnh lại Breadcrumb của chi tiết các thương hiệu thì chỉnh lại ở: /flatsome/woocommerce/global/breadcrumb.php nhé.
     


Like và Share ủng hộ ITSEOVN