WordPress는 사용자 지정 URL을 함수에 매핑합니다.
WordPress 기반의 웹사이트에 커스텀 URL 구조를 추가하려고 합니다.
예를 들어 다음과 같습니다.
example.com/machines //list all machines in a table
example.com/machines?some=params //list filtered machines in a table
example.com/machines/1 //show single machine
데이터는 제가 이미 개발한 외부 API에서 컬을 통해 가져옵니다.
많은 테이블에서 정규화되어 있기 때문에 커스텀 포스트 타입으로 데이터를 Import할 수 없고, 비즈니스 로직이 복잡하고, api가 다른 디바이스에서 사용되고 있습니다.
add_rewrite_rule에 대한 문서를 확인했는데 두 번째 파라미터로 인해 당황하고 있습니다.
$redirect
(string) (required) The URL you would like to actually fetch
가져올 URL이 없습니다.심플 라우터로서 기능하는 함수를 실행하고 싶습니다.url 부분을 가져와서 외부 API를 호출하고 올바른 데이터가 포함된 템플릿을 반환합니다.
API를 호출하는 방법은 간단하지만 실제로 함수에 URL을 라우팅하는 방법과 템플릿을 로드하는 방법(기존 WordPress 헤더를 사용).php와 footer.filters)는 나를 당황하게 한다.
많은 검색과 몇 가지 좋은 자료를 읽은 후에, 나는 해결책을 찾았다.
순서 1: 사용add_rewrite_endpoint
쿼리 변수에 매핑되는 기본 URL을 작성하려면 다음 절차를 수행합니다.
add_action( 'init', function(){
add_rewrite_endpoint( 'machines', EP_ROOT );
} );
2단계: permalinks settings 페이지에 접속하여 "Save Changes"를 클릭하여 다시 쓰기 규칙을 삭제합니다.
스텝 3: 액션에 접속하다'template_redirect'
url이 히트 했을 때 실제로 작업을 수행합니다.
add_action( 'template_redirect', function() {
if ( $machinesUrl = get_query_var( 'machines' ) ) {
// var_dump($machinesUrl, $_GET);
// $machinesURl contains the url part after example.com/machines
// e.g. if url is example.com/machines/some/thing/else
// then $machinesUrl == 'some/thing/else'
// and params can be retrieved via $_GET
// after parsing url and calling api, it's just a matter of loading a template:
locate_template( 'singe-machine.php', TRUE, TRUE );
// then stop processing
die();
}
});
스텝 4: 기타 할 일은 URL에 대한 히트를 처리하는 것뿐입니다.다른 부분은 없습니다. example.com/machines
WordPress의 내장의 어느 시점에서 빈 문자열이 false로 평가되어 건너뛰기 때문에 마지막 단계는 필터에 후크하는 것입니다.'request'
기본값을 설정합니다.
add_filter( 'request', function( $vars = [] ) {
if ( isset( $vars['machines'] ) && empty( $vars['machines'] ) ) {
$vars['machines'] = 'default';
}
return $vars;
});
이것은 모두 클래스로 정리하면 쉽게 개선할 수 있습니다.URL 해석 및 템플릿 로딩 로직은 기본적인 MVC 셋업이나 파일로부터의 루트 로드 등 기본적인 라우터에 전달할 수 있지만, 이것이 시작점입니다.
간단한 해결책은 새 템플릿 리디렉션을 생성하는 것입니다.
로딩한다고 가정하면example.com/custom-url
/**
* Process the requests that comes to custom url.
*/
function process_request() {
// Check if we're on the correct url
global $wp;
$current_slug = add_query_arg( array(), $wp->request );
if($current_slug !== 'custom-url') {
return false;
}
// Check if it's a valid request.
$nonce = filter_input(INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING);
if ( ! wp_verify_nonce( $nonce, 'NONCE_KEY')) {
die( __( 'Security check', 'textdomain' ) );
}
// Do your stuff here
//
die('Process completed' );
}
add_action( 'template_redirect', 'process_request', 0);
언급URL : https://stackoverflow.com/questions/38901536/wordpress-map-custom-url-to-a-function
'programing' 카테고리의 다른 글
폴리랑:커스텀 문자열을 번역하는 방법 (0) | 2023.04.03 |
---|---|
mongodb 컬렉션에서 최신 레코드 가져오기 (0) | 2023.04.03 |
2개의 필드(하나는 역방향)로 정렬 (0) | 2023.03.29 |
spring mvc rest 서비스 리다이렉트/전송/프록시 (0) | 2023.03.29 |
WordPress 검색 결과에 결과 추가 (0) | 2023.03.29 |