페이지를 만들지 않고 특정 URL에 템플릿 파일 사용


14

해당 템플릿에 대한 페이지를 만들지 않고도 특정 URL에 템플릿 파일을 사용할 수 있는지 궁금합니다.

이것은 내 단순화 된 문제입니다.

WP에서 일부 후행 양식 데이터가있는 특정 URL을 가리키는 링크 콘텐츠가있는 페이지를 만들었습니다 (mysite.com/retail/?a=test&b=1234) .

해당 URL (소매)이 "테일"이라는 페이지를 생성하지 않고 하위 테마 디렉토리에있는 템플릿 파일 template-retail.php를 자동으로 사용하고 템플릿 페이지를 선택하지 않기를 원합니다. template-retail.php 파일에는 외부 컨텐츠 만 있으며 Wordpress 자체는 없습니다.

이것이 가능한가?


1
파일로 HTAccess 리디렉션을 생성 한 다음 요청을 처리해야합니다.
Howdy_McGee

이 경우 .htaccess 파일에 액세스 할 수 없습니다. 다른 방법이 있습니까?
Keat

이러한 유형의 작업을 수행하기 위해 액세스 할 수있는 플러그인이 있습니다. 사용자 정의 파일을 서버에 업로드하여 적중 할 수있는 방법이 있습니다.
Howdy_McGee

4
확실하지 프로젝트의 세부 사항하지만 마음에 와서있는 첫 번째 것들 모두에 대해 template_redirect또는 엔드 포인트
s_ha_dum

답변:


16

당신은 URL을보고 파일을로드하고 종료 할 수 있습니다.

WordPress에서 환경을로드 할 때 수행 할 수 있습니다 (예 : on) 'init'.

add_action('init', function() {
  $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
  if ( $url_path === 'retail' ) {
     // load the file if exists
     $load = locate_template('template-retail.php', true);
     if ($load) {
        exit(); // just exit if template was found and loaded
     }
  }
});

이렇게하면 슬러그 "소매"가 있는 실제 페이지를 사용할 수 없습니다.

이것은 쉽지만 하드 코딩되기 때문에 단일 페이지에 필요한 경우 괜찮습니다. 더 많은 URL을 제어 해야하는 경우이 답변 에서 제안 된 솔루션을 살펴보십시오 .


답변 주셔서 감사합니다. 위의 코드를 작동시킬 수 없습니다. 이 사실이 결코 없다 "($ url_path === '소매')가 {경우는"$의 url_path이 값으로 문자열입니다 : " example.com/retail는 "
Keat

를 시도 var_dump($url_path);하고 어떻게 보이는지 확인하고 코드를 조정합니다. 이 값은 실제 URL 에 따라 다릅니다 . 예를 들어, 사용자 정의 홈 URL 또는 하위 폴더에 설치된 WP는 다를 수 있습니다. @Keat
gmazzap

1
답장을 보내 주셔서 감사합니다. 답변이 늦어서 죄송합니다. 이 솔루션을 사용했으며 완벽하게 작동합니다. $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
Keat

5

init작업은 달성하려는 대상에 적합하지 않습니다. template_include대신 필터를 사용해야합니다 . 이를 결합 get_query_var하여 URL 매개 변수를 검색하여 어떤 템플릿을로드해야하는지 확인합니다. 링크는 다음과 같습니다.

암호:

add_filter( 'template_include', 'portfolio_page_template', 99 );

function portfolio_page_template( $template ) {

    if ( is_page( 'portfolio' )  ) {
        $new_template = locate_template( array( 'portfolio-page-template.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

2

이 작업을 수행하는 WordPress-way는입니다 page-templates. https://developer.wordpress.org/themes/template-files-section/page-template-files/

WordPress 템플릿 용 코드 만 있으면됩니다. 워드 프레스 테마에서 페이지 템플리트를 작성하고 이름을 바꿀 수 있습니다.

page-id.php

해당 페이지는 자동으로 페이지를 선택하여 템플릿을 사용합니다.

예를 들어 페이지의 ID가 5874 인 경우 템플릿 이름을 page-5784.php

페이지 슬러그를 기반으로 템플릿 이름을 지정할 수도 있습니다. 예를 들어 페이지 슬러그 인 경우 hello-world템플릿 이름은page-hello-world.php

참조 : -https : //developer.wordpress.org/files/2014/10/template-hierarchy.png


0

@ shivanand-sharma 이것은 워드 프레스에서 다른 페이지와 같은 페이지를 만드는 완벽하고 깨끗한 방법 ( https://developer.wordpress.org/themes/template-files-section/page-template-files/ )입니다. 페이지를 숨기려면 간단하고 효과적인 플러그인 ' https://wordpress.org/plugins/exclude-pages/ '를 사용하십시오.

내 페이지에 POST 또는 GET 을 만들고 일부 세션 데이터 'WC ()-> session'을 저장하려면 URL이 필요하다고 말해야합니다. 사용자 정의의 중추를 가질 수 있기 때문에이 문제와 다른 문제를 해결합니다. 전체 wordpress, woocommerce 등의 모든 'require ('wp-load ') 등'을 포함한 PHP 코드 , mysite.com/index.php/MYPAGE .....

당신은 단지해야합니다 :

첫 번째 : 테마 위치 내에 'wp-content / themes / mytheme / customtemplate.php'와 같은 새 페이지의 템플릿으로 파일을 만드십시오 (코멘트는 중요합니다.

<?php /* Template Name: WhateverName */ 
echo 'Hello World';echo '</br>';
var_dump(WC()->session); 
var_dump($_POST);
var_dump($_GET);
?>

둘째 : 'wp-admin'> 페이지를 통해 워드 프레스에서 정상적으로 페이지 를 만들고 ( MYPAGE 와 같은 이름을 말 하거나 원하는대로 슬러그를 변경할 수 있습니다) 물론 이전 템플릿을이 페이지의 템플릿으로 연결하십시오. 템플릿 속성 섹션의 'WhateverName'

이제 새 페이지 'mysite.com/index.php/MYPAGE'를 열면 알 수 있습니다.

Hello World
object(WC_Session_Handler)#880 .....................

추가 사항 : 'script'HTML 태그 안에 상상할 수있는 모든 것을 장바구니에 넣고 자바 스크립트 또는 jquery 함수를 만들고 다음과 같은 코드를 포함시켜 보겠습니다.

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.