Monday, March 8, 2021
Lưu Xuân Trường's Blog
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ
No Result
View All Result
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ
No Result
View All Result
Lưu Xuân Trường's Blog
No Result
View All Result

Hạn chế khi làm việc với WPML và cách fix ra sao

truongluu by truongluu
10/10/2020
in Kinh nghiệm, WordPress
Reading Time: 5min read
0 0
0
Hạn chế khi làm việc với WPML và cách fix ra sao
0
SHARES
27
VIEWS
Share on FacebookShare on Twitter

Khi làm việc với WPML, mình thấy nó có một hạn chế mà nhà xuất bản plugin đã không fix vấn đề này qua nhiều phiên bản ( cho tới phiên bản hiện tại), cho dù nhiều người dùng có phản ánh trên diễn đàn của WPML trong đó có mình. Và tới hiện tại các website mình đang làm mình mới có hướng giải quyết triệt để vấn đề này. Xin phép chia sẻ với các bạn. Đó là WPML không thể xử lý translate cho link taxonomy được. Ví dụ. Khi mình tạo ra 1 taxonomy để quản lý danh mục dự án,  nó sẽ sinh cho mình 1 slug của link term như sau /project-category/du-an-hien-tai sẽ link tới trang danh sách dự án hiện tại. Nhưng khi sài WPML thì khi có 1 ngôn ngữ thứ 2 là tiếng anh thi link term sẽ là /en/project-category/current-project, như vậy WPML chỉ dịch được term name và term slug.

Mình thực hiện 2 bước để có thể translate

  1. Sử dụng hàm add_rewrite_rule của wordpress
  2. Viết lại term link.Theo dõi đoạn mã bên dưới, thứ nhất mình thêm rule cho link mới
    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    add_action( 'init', 'wp_init_func' );
    function wp_init_func() {
        
        // Add rewrite term
        
        add_rewrite_rule( '^project-category/([^/]+)/?
     
    Thêm rule mới là link taxonomy 2 ngôn ngữ mà mình đã thêm, kèm theo xử lý rule có phân trang
     
    Sau đó, mình viết lại term link
     
    <pre class="lang:default decode:true ">add_filter( 'term_link', 'wp_term_link_func', 10, 3 );
     
      function wp_term_link_func($link, $term, $taxonomy ) {
     
          if( $taxonomy == 'project_category') {
            $linkSlugTranslate = _trans('project_category', 'link');
            $link = str_replace('project_category', $linkSlugTranslate, $link);
          }
          return $link;
      }

    Ở đây mình viết lại term link, với hàm _trans là translate text theo domain theo ngôn ngữ hiện tại
    2 đoạn code trên được lưu trong file functions.php.

Sau này mình sẽ viết thêm 1 plugin để quản lý việc này trên giao diện, hiện tại mình chỉ mô tả hardcode để xử lý việc này.

Như vậy, sau khi xử lý 2 đoạn mã trên thì mình đã có bản translate hoàn chỉnh sau, đối với tiếng việt /danh-muc-du-an/du-an-hien-tai và ngôn ngữ tiếng Anh sẽ là /en/project-category/current-project

, ‘index.php?project_category=$matches[1]’, ‘top’ );
add_rewrite_rule( ‘^project-category/([^/]+)/page/([^/]*)Thêm rule mới là link taxonomy 2 ngôn ngữ mà mình đã thêm, kèm theo xử lý rule có phân trang

Sau đó, mình viết lại term link

1
 

Ở đây mình viết lại term link, với hàm _trans là translate text theo domain theo ngôn ngữ hiện tại
2 đoạn code trên được lưu trong file functions.php.

Sau này mình sẽ viết thêm 1 plugin để quản lý việc này trên giao diện, hiện tại mình chỉ mô tả hardcode để xử lý việc này.

Như vậy, sau khi xử lý 2 đoạn mã trên thì mình đã có bản translate hoàn chỉnh sau, đối với tiếng việt /danh-muc-du-an/du-an-hien-tai và ngôn ngữ tiếng Anh sẽ là /en/project-category/current-project
, ‘index.php?project_category=$matches[1]&paged=$matches[2]’, ‘top’ );

add_rewrite_rule( ‘^danh-muc-du-an/([^/]+)/?

Thêm rule mới là link taxonomy 2 ngôn ngữ mà mình đã thêm, kèm theo xử lý rule có phân trang

Sau đó, mình viết lại term link

1
 

Ở đây mình viết lại term link, với hàm _trans là translate text theo domain theo ngôn ngữ hiện tại
2 đoạn code trên được lưu trong file functions.php.

Sau này mình sẽ viết thêm 1 plugin để quản lý việc này trên giao diện, hiện tại mình chỉ mô tả hardcode để xử lý việc này.

Như vậy, sau khi xử lý 2 đoạn mã trên thì mình đã có bản translate hoàn chỉnh sau, đối với tiếng việt /danh-muc-du-an/du-an-hien-tai và ngôn ngữ tiếng Anh sẽ là /en/project-category/current-project

, ‘index.php?project_category=$matches[1]’, ‘top’ );
add_rewrite_rule( ‘^danh-muc-du-an/([^/]+)/page/([^/]*)Thêm rule mới là link taxonomy 2 ngôn ngữ mà mình đã thêm, kèm theo xử lý rule có phân trang

Sau đó, mình viết lại term link

1
 

Ở đây mình viết lại term link, với hàm _trans là translate text theo domain theo ngôn ngữ hiện tại
2 đoạn code trên được lưu trong file functions.php.

Sau này mình sẽ viết thêm 1 plugin để quản lý việc này trên giao diện, hiện tại mình chỉ mô tả hardcode để xử lý việc này.

Như vậy, sau khi xử lý 2 đoạn mã trên thì mình đã có bản translate hoàn chỉnh sau, đối với tiếng việt /danh-muc-du-an/du-an-hien-tai và ngôn ngữ tiếng Anh sẽ là /en/project-category/current-project
, ‘index.php?project_category=$matches[1]&paged=$matches[2]’, ‘top’ );

flush_rewrite_rules();
}

Thêm rule mới là link taxonomy 2 ngôn ngữ mà mình đã thêm, kèm theo xử lý rule có phân trang

Sau đó, mình viết lại term link

1
 

Ở đây mình viết lại term link, với hàm _trans là translate text theo domain theo ngôn ngữ hiện tại
2 đoạn code trên được lưu trong file functions.php.

Sau này mình sẽ viết thêm 1 plugin để quản lý việc này trên giao diện, hiện tại mình chỉ mô tả hardcode để xử lý việc này.

Như vậy, sau khi xử lý 2 đoạn mã trên thì mình đã có bản translate hoàn chỉnh sau, đối với tiếng việt /danh-muc-du-an/du-an-hien-tai và ngôn ngữ tiếng Anh sẽ là /en/project-category/current-project

Tags: wordpresswpml
Previous Post

Top các plugin filter của WordPress

Next Post

Property Observers

truongluu

truongluu

Next Post
Property Observers

Property Observers

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Energy and persistance conquer all things

Benjamin Franlink

Quotations

About me

Field of interests: Svelte, ReactJS, Angular, VueJS, React Native, Flutter, NodeJS, MongoDB, Message Broker, WordPress, AdonisJS, NestJS, NuxtJS, Docker, Microservice, Arduino, Game HTML5. Hope to share my experiences with everybody

Recent Posts

  • Code push in React Native
  • What’s middleware? How does it work?
  • Styled components trong ReactJS
  • Frontity cơ bản phần I (Tạo và chạy dự án)
  • React framework for WordPress

Recent Comments

  • truongluu on Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)
  • Hung on Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)
  • Redux Saga phần III (Tips khi làm việc) - Lưu Xuân Trường's Blog on Quản lý trạng thái tải khi dùng redux-saga
  • Redux Saga phần II (Các khái niệm cơ bản) - Lưu Xuân Trường's Blog on Cheatsheets Non Blocking, Blocking Redux Saga
  • truongluu on Giới thiệu về UmiJS P4 (Server Side Rendering)

Archives

  • February 2021
  • January 2021
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • March 2020
  • February 2020
  • January 2020
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • April 2018
  • March 2018

Categories

  • AdonisJS
  • Angular
  • Arduino
  • Backend
  • Câu Hỏi Phỏng Vấn
  • CSS
  • Ebook
  • Frontend
  • Frontity
  • Góc Ngoài Lề
  • How to
  • IOS
  • IQ Test
  • Javascript
  • Kinh nghiệm
  • Kinh nghiệm làm việc
  • Máy chủ
  • Mobile
  • MongoDB
  • NestJS
  • NodeJS
  • NuxtJS
  • Plugins
  • React Native
  • React Native
  • ReactJS
  • Redis
  • Redux-Saga
  • RxJS
  • Tutorials
  • UmiJS
  • Uncategorized
  • VueJS
  • WordPress

Friends

Phu's blog
  • RxJS toàn tập (P1 giới thiệu RxJS là gì)

    RxJS toàn tập (P1 giới thiệu RxJS là gì)

    0 shares
    Share 0 Tweet 0
  • Giới thiệu về UmiJS P1 (Tổng quan về umiJS)

    0 shares
    Share 0 Tweet 0
  • Redux Saga phần I (Giới thiệu)

    0 shares
    Share 0 Tweet 0
  • Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)

    0 shares
    Share 0 Tweet 0
  • Một số câu hỏi phỏng vấn frontend developer

    0 shares
    Share 0 Tweet 0

About me

Lưu Xuân Trường

Field of interests: Svelte, ReactJS, Angular, VueJS, React Native, Flutter, NodeJS, MongoDB, Message Broker, WordPress, AdonisJS, NestJS, NuxtJS, Docker, Microservice, Arduino, Game HTML5. Hope to share my experiences with everybody

© 2020 https://luuxuantruong.info

No Result
View All Result
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ

© 2020 https://luuxuantruong.info

Welcome Back!

Login to your account below

Forgotten Password?

Create New Account!

Fill the forms below to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In