Sử dụng tệp mẫu cho một url cụ thể mà không tạo trang


14

Tôi tự hỏi nếu có thể sử dụng một tệp mẫu cho một url cụ thể mà không phải tạo một trang cho mẫu đó.

Đây là vấn đề đơn giản hóa của tôi:

Tôi đã tạo một trang trong WP với một số nội dung liên kết trỏ đến một url cụ thể với một số dữ liệu biểu mẫu theo dõi: (mysite.com/retail/?a=test&b=1234) .

Tôi muốn url đó (bán lẻ) tự động sử dụng tệp mẫu template-Retail.php của tôi mà tôi có trong thư mục chủ đề con, mà không phải tạo một trang có tên là Retail Retail và chọn trang mẫu từ đó. Chỉ có nội dung bên ngoài trong tệp template-Retail.php, không có gì từ chính Wordpress.

Điều này có thể không?


1
Bạn sẽ cần tạo một chuyển hướng HTAccess đến tệp, sau đó xử lý yêu cầu ở đó.
Howdy_McGee

Tôi không có quyền truy cập vào tập tin .htaccess trong trường hợp này. Còn cách nào khác không?
Keat

có những plugin có thể cung cấp cho bạn quyền truy cập để thực hiện những loại việc này, bằng cách nào đó, bạn sẽ cần phải tải một tệp tùy chỉnh lên máy chủ để nó có thứ gì đó để đánh.
Howdy_McGee

4
Không chắc chắn về tất cả các chi tiết của dự án của bạn, nhưng điều đầu tiên bạn nghĩ đến là template_redirecthoặc một điểm cuối
s_ha_dum 30/03/2015

Câu trả lời:


15

Bạn chỉ có thể nhìn vào url, tải tệp và thoát.

Điều đó có thể được thực hiện khi WordPress tải môi trường của nó, ví dụ như trên '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
     }
  }
});

Lưu ý rằng làm như vậy một trang thực sự với sên "bán lẻ" không bao giờ có thể được sử dụng.

Điều này khá dễ dàng, nhưng cũng được mã hóa cứng, vì vậy nếu bạn cần điều này cho một trang thì không sao. Nếu bạn cần kiểm soát nhiều url hơn, hãy xem giải pháp được đề xuất trong câu trả lời này .


Cảm ơn câu trả lời của bạn. Tôi không thể có được mã trên để làm việc. Điều này không bao giờ đúng: "if ($ url_path === 'Retail') {" $ url_path là một chuỗi có giá trị: " example.com/retail "
Keat

Hãy thử var_dump($url_path);và xem nó trông như thế nào và điều chỉnh mã. Giá trị đó phụ thuộc vào url thực của bạn . Ví dụ: đối với url nhà tùy chỉnh hoặc WP được cài đặt trong thư mục con có thể khác nhau. @Keat
gmazzap

1
Cảm ơn đã trả lời, và xin lỗi vì câu trả lời muộn. Tôi đã sử dụng giải pháp này và nó hoạt động hoàn hảo. $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
Keat

5

Các inithành động không thích hợp cho những gì bạn đang cố gắng để đạt được. Bạn nên sử dụng template_includebộ lọc thay thế. Bạn sẽ kết hợp điều này với get_query_varđể lấy thông số URL để kiểm tra mẫu nào cần được tải. Dưới đây là các liên kết:

Mã số:

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

1

Cách WordPress để làm điều này là với page-templates. https://developer.wordpress.org/theme/template-files-section/page-template-files/

Bạn chỉ cần một mã cho mẫu WordPress. Trong chủ đề WordPress của bạn, bạn có thể tạo một mẫu trang và đổi tên nó thành

page-id.php

Trang cụ thể đó sẽ tự động chọn nó và sử dụng mẫu.

Ví dụ: nếu trang của bạn có id là 5874, bạn sẽ đặt tên cho mẫu là page-5784.php

Bạn cũng có thể đặt tên cho mẫu dựa trên sên trang. Ví dụ: nếu slug trang hello-worldthì tên mẫu sẽ làpage-hello-world.php

Xem thêm: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png


0

@ shivanand-sharma đây là phương pháp hoàn hảo và gọn gàng hơn ( https://developer.wordpress.org/theme/template-files-section/page-template-files/ ) để tạo bất kỳ trang nào như bất kỳ trang nào khác trong wordpress và nếu bạn muốn để ẩn trang của bạn, tôi chỉ cần sử dụng plugin đơn giản và hiệu quả ' https://wordpress.org/plugins/exclude-pages/ '

Tôi phải nói rằng tôi đang cần một URL để tạo POST hoặc GET vào trang của riêng tôi và lưu một số dữ liệu phiên 'WC () -> session', và điều này giải quyết vấn đề này và các vấn đề khác, bởi vì bạn có thể có một xương sống tùy chỉnh Mã php bao gồm tất cả 'yêu cầu (' wp-load '), v.v. của toàn bộ wordpress, wooc Commerce, v.v. để làm việc thông qua, mysite.com/index.php/MYPAGE .....

Bạn chỉ cần:

Đầu tiên: Tạo một tệp bên trong vị trí chủ đề của bạn dưới dạng mẫu của trang mới, ví dụ như 'wp-content / Themes / mysteme / customtemplate.php' (Nhận xét rất quan trọng để 'Tên mẫu' có thể được Wordpress quan sát):

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

Thứ hai: Tạo một trang tại wordpress bình thường thông qua 'wp-admin'> Pages (Giả sử một tên như MYPAGE hoặc bạn có thể thay đổi slug bất cứ điều gì bạn muốn) và tất nhiên liên kết mẫu trước đó làm mẫu của trang này là tên 'AnyName' trên phần attributtes mẫu.

Vì vậy, hãy mở trang mới 'mysite.com/index.php/MYPAGE' và bạn sẽ thấy.

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

Ngoài ra: Hãy tạo các hàm javascript hoặc jquery trong giỏ hàng, thanh toán, bất cứ điều gì bạn có thể tưởng tượng bên trong các thẻ HTML của 'script' và bao gồm mã như thế này:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
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.