워드 프레스는 URL 슬러그를 어떻게 생성합니까?


답변:


16

WP 슬러그 생성 방법에 대한 페이지 / 자습서 / 문서를 제공 할 수는 없지만 sanitize_title()기능을 살펴보십시오 .

함수 이름으로 잘못된 인상을받지 마십시오 . 페이지 / 포스트 제목으로 추가 사용하기 위해 제목을 삭제하는 것은 아닙니다 . 제목 문자열을 가져와 URL에서 사용되도록 반환합니다.

  • HTML 및 PHP 제거
  • 특수 문자를 제거
  • 모든 문자를 소문자로 변환
  • 공백, 밑줄 및 마침표를 하이픈 / 대시로 바꿉니다.
  • 여러 개의 연속 대시를 하나로 줄입니다

의 핵심 추가 무언가가 (당신이 확인을 위해 원본을보고해야 할 것하지 가장자리 경우가 될 sanitize_title()것입니다 항상 생성에 충분 정확히 , 경우에 당신이 기대 동일),하지만이 전부는 아니지만, 적어도 99 %를 커버한다 .


1
@kaiser : 나는 당신이 단순히 T5 Rewrite 와 사랑에 빠졌다고 생각했습니다. :) 일반적으로 : 타이틀이 실제로 길면 WP는 특정 최대 길이까지 슬러그를 잘라냅니다. 그것이 sanitize_title함수에 적용된 필터에 의해 수행 되는지 또는 함수가 실행 된 후 다른 것에 의해 처리 되는지 여부를 완전히 확신하지 못하는 경우 중 하나입니다 .
Johannes Pille

나는 그것이 추측 sanitize_title한 요구 사항이 체크 아웃하는 것을 -filter. 그러나 다른 관련 기능도 있습니다. 나는 이것에 대해 전혀 모른다. 때로는 생각 SimplePie보다 이해하기가 더 쉬운 것 같습니다 WP_Rewrite. Btw : Toscho는 "Monkeyman Rewrite Analyzer"기능을 플러그인에 통합하는 작업을하고 있습니다. 그곳에서 일이 정말 흥미로워지기 시작합니다.
카이저

1
URL 친화적 인 슬러그 생성에 대해 좀 더 명확하게하려면 sanitize_title_with_dashes ()를 고려 하십시오 .
Tom Auger

5

이 기능을 사용할 수 있습니다 :

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;
}

wp url 살균 기능이 작동하는 방식과 정확히 같습니다.


4

서비스 핵심

더 없습니다 개발자 모드 옆에서 워드 프레스에 내장 된 WP_DEBUG이 경우 너무 많은 도움이되지 않습니다. 기본적으로 WP는 클래스에 대한 함수 기반의 저수준 래퍼 인 "Rewrite API"를 사용하며 WP_RewriteCodex에서 읽을 수 있습니다 . global $wp_rewrite객체는 클래스로 또는 상호 작용을 검사 서비스에 서있다.

조사하는 데 도움이되는 플러그인.

Toschos "T5 Rewrite"-PluginJan Fabrys "Monkeyman Rewrite Analyzer"-Plugin 이 안내해드립니다. "T5 Rewrite"의 작은 확장 기능을 "Monkeyman Rewrite Analyzer"와 원활하게 통합하기 위해 GitHub 의 "T5 Rewrite"repos Wikie 에서 찾을 수 있습니다 .

"Monkeyman"플러그인은 도구 아래의 관리 UI 메뉴에 새 페이지를 추가합니다 . "T5 Rewrite"플러그인은 Settings > Permalinks 페이지에 새로운 도움말 탭을 추가합니다 . 내 확장 프로그램은 언급 된 도구 페이지에도 도움말 탭을 추가합니다 .

다음은 "T5 Rewrite"플러그인 도움말 탭 내용의 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

소용돌이 = 패턴 | Beschreibung = 설명 | Beispiele = 예

노트

"T5 Rewrite"플러그인은 재 작성 객체를 검사하는 데 도움이되는 훌륭한 작업을 수행합니다. 그리고 더 많은 일을합니다. 새로운 가능성을 추가합니다. 따라서 기본 플러그인 패키지의 일부입니다 (적어도 설치에서는).


2

실제로 wp_insert_post (post.php) 핵심 기능을 보면 다음과 같은 기능을 수행 할 수 있습니다.

$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 );

주목해야 할 것은 wp_unique_post_slug와 sanitize_title을 모두 사용한다는 것입니다.

wp_unique_post_slug( sanitize_title( 

0

오래된 질문을 다시 시작한 것을 용서하지만이 방법이 나에게 완벽하게 작동한다는 것을 알았을 때와 같은 필요성이있었습니다.

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

이 방법은 이중 살균을 사용합니다.

첫 번째는 saveHTML 및 PHP 태그가 제거되고 악센트가 제거 되는 모드를 사용합니다 (악센트 문자는 비악 등 문자로 대체 됨).

두 번째 query모드는 모든 공백이 대시로 바뀌고 -다른 문장 부호가 제거되도록합니다.

이것이 누군가를 돕기를 바랍니다! :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.