WordPress tạo sên URL như thế nào?


Câu trả lời:


16

Tắt dơi, tôi không thể cung cấp cho bạn một trang / hướng dẫn / tài liệu về cách tạo ra các con sên WP, nhưng hãy xem sanitize_title()chức năng này.

Đừng để lại ấn tượng sai bởi tên hàm, nó không có nghĩa là vệ sinh một tiêu đề để sử dụng thêm làm tiêu đề trang / bài đăng . Nó nhận một chuỗi tiêu đề và trả về nó được sử dụng trong một URL:

  • dải HTML & PHP
  • dải ký tự đặc biệt
  • chuyển đổi tất cả các ký tự thành lowcaps
  • thay thế khoảng trắng, dấu gạch dưới và dấu chấm bằng dấu gạch ngang / dấu gạch ngang
  • giảm nhiều dấu gạch ngang liên tiếp thành một

thể có các trường hợp cạnh trong đó lõi làm điều gì đó bổ sung (bạn phải xem nguồn để xác minh rằng sanitize_title()sẽ luôn đủ để tạo ra chính xác như bạn mong đợi), nhưng điều này sẽ bao gồm ít nhất 99%, nếu không phải là tất cả, .


1
@kaiser: Tôi cho rằng bạn chỉ đơn giản là yêu thích Rewrite :) (nằm trong chương trình nghị sự của tôi để kiểm tra) | và nói chung: Nếu một tiêu đề thực sự dài, WP cũng cắt xén đến một độ dài tối đa nhất định. Đó là một trong những trường hợp mà tôi không hoàn toàn chắc chắn liệu điều đó được thực hiện bởi sanitize_titlebộ lọc được áp dụng trong chức năng hay không, hay liệu điều đó được xử lý bởi một thứ khác sau khi chức năng đã chạy.
Julian Pille

Tôi đoán đó là bộ sanitize_titlelọc mà người ta cần kiểm tra. Nhưng cũng có các chức năng liên quan khác . Tôi thực sự không có ý tưởng về điều này. Đôi khi nó có vẻ SimplePiedễ hiểu hơn WP_Rewriteđiều. Btw: Toscho hoạt động dựa trên việc tích hợp chức năng "Trình phân tích ghi lại Monkeyman" vào plugin của mình. Đó là nơi mọi thứ bắt đầu thực sự thú vị.
kaiser

1
Ngoài ra, hãy xem xét sanitize_title_with_dashes () nếu bạn muốn rõ ràng hơn một chút về việc tạo một con sên thân thiện với URL.
Tom Auger

5

Bạn có thể sử dụng chức năng này:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

Đây là loại chính xác làm thế nào chức năng khử trùng url wp hoạt động.


4

Cốt lõi tại dịch vụ của bạn

Không có chế độ nhà phát triển được tích hợp vào WordPress ngoài WP_DEBUGđiều này, điều này không giúp bạn quá nhiều trong trường hợp này. Về cơ bản WP sử dụng "Rewrite API" , đây là một trình bao bọc mức độ thấp dựa trên chức năng cho WP_Rewritelớp mà bạn có thể đọc về Codex . Đối global $wp_rewritetượng đứng tại dịch vụ của bạn để kiểm tra nó hoặc tương tác với lớp.

Các plugin giúp tìm kiếm trong đó.

Toschos "T5 Rewrite" -PluginJan Fabrys "Monkeyman Rewrite Analyzer" -Plugin sẽ hướng dẫn bạn theo cách của bạn. Tôi đã viết một phần mở rộng nhỏ cho "Trình ghi lại T5" để tích hợp dễ dàng với "Trình phân tích ghi lại Monkeyman", mà bạn có thể tìm thấy trong phần giới thiệu "Viết lại bài viết" ở đây trên GitHub .

"Monkeyman" -plugin thêm một trang mới, được nộp trong menu UI của quản trị viên trong Công cụ . Phần mềm "Viết lại T5" thêm một tab trợ giúp mới vào trang Cài đặt > Permalinks . Tiện ích mở rộng của tôi cũng thêm các tab trợ giúp vào Trang công cụ được đề cập .

Dưới đây là một ảnh chụp màn hình về nội dung tab trợ giúp "T5 Rewrite" trông như thế nào.

nhập mô tả hình ảnh ở đây

Vorlage = Hoa văn | Beschreibung = Giải thích | Beispiele = Ví dụ

Ghi chú

-Plugin "T5 Rewrite" thực hiện công việc tuyệt vời với việc giúp bạn kiểm tra đối tượng viết lại. Và nó thậm chí còn nhiều hơn: Nó thêm các khả năng mới. Do đó, nó (ít nhất là trong phần cài đặt của tôi) trong gói plugin cơ bản của tôi.


2

Trên thực tế, nếu bạn xem hàm lõi wp_insert_post (post.php), bạn sẽ thấy rằng nó thực hiện như sau:

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

Điều quan trọng cần lưu ý là sử dụng cả wp_unique_post_slug và sanitize_title:

wp_unique_post_slug( sanitize_title( 

0

Tha thứ cho việc tiếp tục một câu hỏi cũ, nhưng tôi có cùng sự cần thiết khi phát hiện ra phương pháp này hoàn toàn phù hợp với tôi:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

Phương pháp này sử dụng vệ sinh kép.

Cái đầu tiên sử dụng savechế độ, trong đó các thẻ HTML và PHP bị tước bỏ và các dấu được loại bỏ (các ký tự có dấu được thay thế bằng các dấu tương đương không có dấu).

queryChế độ thứ hai đảm bảo tất cả các khoảng trắng được thay thế bằng dấu gạch ngang -và dấu chấm câu khác được loại bỏ.

Hy vọng điều này sẽ giúp được ai đó! :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.