워드 프레스에서의 라우팅은 어떻게 작동합니까?


13

핵심 wp 라우팅은 어떻게 작동합니까? 이해하는데 어려움을 겪고 있습니다 ... MVC에서 귀하의 URL은 MyController-> myaction ()에 매핑되는 mycontroller / myaction처럼 보입니다.

drupal에서 index.php? q = mycustomerpath / hello는 테마에 "테마"인 콘텐츠를 반환하는 원하는 함수에 매핑 할 수 있습니다.

그러나 wp에서, 나는 일이 어떻게 수행되는지 단서가 없습니다 ...? p = 1 다음? product = 1 ... 라우팅 흐름의 문서를 검색했지만 찾을 수 없습니다 (Google은 사용자 정의에 대한 기사를 반환합니다) 노선) .. 먼저 핵심 라우팅의 기본 사항을 이해하고 싶습니다 ..


코드를 파고, 각 요청에서 query_posts를 호출하는 것을 봅니다. 왜 지구상에서 매번 게시물을 쿼리해야합니까? 실제로 게시물을 표시하고 싶지 않은 경우가 있습니까 ??
yeahman

1
컨텐츠는 WP에 게시물로 저장됩니다. 따라서, 당신이 내용을 보여줄 필요가있을 때 그것을 질의해야합니다
Sisir

WordPress의 작동 방식을 이해하기 위해 이해해야 할 개념 인 "루프"에 대해 읽어 보시기 바랍니다. 필수 "루프"는 query_posts의 결과 인 게시물 배열을 표시합니다. 관리자가 아닌 URL 요청의 경우 WP는 게시물 만 표시하도록 설계되었으며 게시물 이외의 것을 표시하려면 사용자 지정 프로그래밍이 필요합니다. 관리자 URL 요청은 다르며 "루프"를 사용하지 않고 게시물이 아닌 것을 표시합니다.

확인하지만,이 방법은 TBH 매우 유연 조금 이상하고되지 않습니다
yeahman

연락처 양식을 표시하고 싶다고 말하십시오. html을 페이지 컨텐츠 유형으로 넣어야합니까? 나는 아직도 (? 테마 page.php에 매우 추한 방법) ... 양식 제출에 대한 논리를 넣어 위치를 찾기 위해 노력하고 있습니다
yeahman

답변:


20

WordPress에서 URL은 경로에 매핑되지 않습니다. 데이터베이스 쿼리에 매핑됩니다.

"기본"퍼머 링크 모드에서 WordPress를 사용하는 경우 기본 URL 쿼리에? p = 1 또는? page = 234 등과 같은 변수 세트가 있습니다. ? s = search와 다른 많은 것들도 있습니다.

"pretty"퍼머 링크를 사용하는 경우, "다시 쓰기 규칙"이라는 큰 규칙 세트가 작성되어 다양한 URL 패턴을이 동일한 URL 매개 변수 세트에 직접 맵핑합니다. 따라서 / 2014 / 04 / 12 / example과 같은 URL은? year = 2014 & month = 04 & day = 12 & postname = example 또는 이와 유사한 것으로 매핑됩니다. 따라서이 매핑이 완료된 후 다음 사항도 이에 적용됩니다.

이러한 변수는 기본적으로 WP_Query 클래스의 기본 인스턴스를 제어합니다. WP_Query 클래스는 데이터베이스에서 "게시물"을 가져 오기 위해 데이터베이스 쿼리를 작성하는 모든 정보를 보유합니다. 전달 된 다양한 매개 변수는 어떤 종류의 쿼리를 작성하고 어떤 데이터를 가져 오는지를 제어합니다.

WordPress에서 표시 할 수있는 모든 것은 본질적으로 "게시물"입니다. 블로그는 시간 기반 순서의 일련의 게시물입니다. "페이지"는 이름이 정의 된 정적 게시물입니다. "사용자 정의 게시물 유형"은 정확하게 사용자 정의 유형이있는 "게시물"입니다. WordPress에 무엇이든 표시하는 모든 주요 쿼리는 wp_posts 테이블에서 게시물의 일부를 가져옵니다.

WP_Query가 그 일을합니다. URL의 매개 변수는 해당 기본 쿼리로 직접 전송되어 사용됩니다.

그런 다음 테마는 쿼리의 결과에 따라 사용할 템플릿을 결정합니다. / category / example을 요청한 경우? category_name = example이되어 기본 $ wp_query-> query_vars 배열이 해당 정보를 가져오고 WP_Query가 "example"범주에 대한 마지막 X 개의 게시물을 가져옵니다. is_category 플래그를 true로 설정합니다.

템플릿 로더는이 후에 실행됩니다. is_category ()가 true를 반환하고 카테고리 템플릿을 선택하기로 결정하면 템플릿에 따라 category-example.php를 찾고 category.php로 대체됩니다. 계층.

따라서 URL 작동 방식을 간단하게 변경하려는 경우의 질문입니다. URL을 변경 하시겠습니까? 또는 URL을 매핑 하시겠습니까? URL은 함수에 매핑되지 않기 때문에 쿼리를 제어하는 ​​매개 변수에 매핑됩니다. URL이 해당 기본 쿼리를 조정하도록하려면 특수 URL이 완전히 다른 특수 코드를 실행하도록하는 것과는 약간 다른 프로세스입니다.

그리고 의견에서 귀하의 특정 질문에 대답하기 위해 : "실제로 게시물을 표시하고 싶지 않은 경우가 있습니까?" 아니 없어. 모든 것이 게시물입니다. 모든 내용은 게시물에 저장됩니다. 컨텐츠를 다른 곳에 저장하고 다른 경우에는 그렇게 할 수 있지만, 일반적으로 필요하지 않기 때문에 더 어렵습니다. 특별한 콘텐츠가있는 경우 맞춤 게시물 유형을 만들고 콘텐츠를 해당 유형의 게시물로 저장 한 다음 URL 패턴을 매핑하십시오. 쉬운.


drupal 6의 사용자 정의 유형과 매우 유사한 게시물 (사용자 정의 게시물 유형 등을 통해)로 표현해야한다는 것을 이해하지만 사이트의 모든 단일 콘텐츠를 저장하는 단일 게시물 테이블의 성능에 영향을 미칩니 까? drupal 7은 엔티티 유형을 도입하여 해결했습니다. 따라서 사용자 정의 유형을 작성하고 노드 테이블에 모든 것을 저장할 필요가 없지만 drupal 프레임 워크에서 여전히 활용할 수있는 자체 엔티티 테이블에 모든 것을 저장할 수 있습니다. 워드 프레스가 앞으로 이러한 접근 방식을 소개하기를 바랍니다. 자세한 설명은 thx입니다.
yeahman

URL을 내 자신의 기능 / 테마에 매핑하려면 wp 라우터가 도움이 될 것입니다.
yeahman

전체 라우팅 시스템을 추가 할 필요는 없습니다. 더 간단한 방법이 있습니다. WordPress의 기초는 사용자 생성 컨텐츠를 표시하는 것입니다.이 컨텐츠는 모두 posts 테이블에 저장됩니다. 사용자가 생성하지 않은 컨텐츠를 표시하려면 일반적으로 테마 또는 플러그인에서 수행하십시오. 페이지가 생성 될 때 프로세스의 다양한 부분을 재정의하는 수백 (수천)의 동작 후크 및 필터와 다른 방법이 있습니다. 짧은 코드와 같은 것들로, 사용자 정의 html을 컨텐츠에 삽입하는 것은 상대적으로 쉽습니다.
Otto

내가 작성한 게시물 유형에 사용자 정의 html / php를 어떻게 추가합니까? 테마의 single.php를 수정하거나 단일 mycustompost.php를 만들지 않고 (이동적인 접근 방식은 아님)
yeahman

6
1 년 이상 지금 워드 프레스로 작업 한 후 ... 아직도 확신이 없습니다. 프레임 워크가 우아하지 않고 추악하지는 않습니다 ... 간단한 블로그로 작동하지만 다른 유형의 웹 사이트를 개발하고 싶다면. 그것은 의도하지 않은 일을하기 위해 워드 프레스를 해킹하는 것입니다.
yeahman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.