Trang tùy chỉnh với các biến trong url. Url đẹp với add_rewrite_rule


7

Sử dụng WP3.1

Tôi có một trang tùy chỉnh với WP_Query và truy vấn nhận các biến động từ url. Và tôi muốn các biến an toàn và url sạch.

Thí dụ:

carpage /? carmodel = honda & location = finland

ĐẾN

xe / honda / finland /

Tôi đã tạo add_rewrite_rule vào hàm.php và nó hoạt động, nhưng tôi không chắc nó an toàn khi sử dụng cái này.

Hàm.php

  function fcars() {

  add_rewrite_rule('carpage/[/]?([a-zA-Z-]*)[/]?([a-zA-Z-]*)$', 'index.php?pagename=carpage&var1=$matches[1]&var2=$matches[2]');

  add_rewrite_tag('%var1%', '[a-zA-Z]+');
  add_rewrite_tag('%var2%', '[a-zA-Z]+');
}

add_action('init', 'fcars');

Và trong mẫu tùy chỉnh, tôi nhận được các vars

Ai đó có thể xin vui lòng giúp tôi với điều này. Làm thế nào tôi có thể làm cho nó an toàn để sử dụng và đây có phải là cách đúng đắn trong WP3.1

Cách đúng để tạo add_rewrite_rule trong trường hợp này là gì:

xe / honda / finland /

(chỉ dấu gạch ngang và chữ nhỏ trong url) carpage là trang mẫu tĩnh.

Câu trả lời:


16

Tôi nghĩ rằng điều add_rewrite_tag()này là không cần thiết và có thể được thay thế bằng cách thêm các biến vào các vars truy vấn công khai trực tiếp:

// Either directly (in your init hook):
$wp->add_query_var( 'var1' );
$wp->add_query_var( 'var2' );

// Or via a filter:
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
    $query_vars[] = 'var1';
    $query_vars[] = 'var2';
    return $query_vars;
}

Ngoài ra, bạn hiện cho phép một hoặc hai dấu gạch chéo ở phía trước nhưng không có dấu gạch ở phía sau. Tôi nghĩ rằng bạn muốn di chuyển /?đến cuối của regex. Phần [a-zA-Z-]của con sên đôi khi cũng được viết là [^/](mọi thứ trừ một dấu gạch chéo), nhưng trong trường hợp này có lẽ nó sẽ không tạo ra sự khác biệt.

Tôi sẽ viết quy tắc viết lại như thế này:

add_action( 'init', 'wpse12065_init' );
function wpse12065_init()
{
    add_rewrite_rule(
        'carpage(/([^/]+))?(/([^/]+))?/?',
        'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]',
        'top'
    );
}

Điều này (/([^/]+))?làm cho cả nhóm tùy chọn, vì vậy /carpage, /carpage/honda/carpage/honda/finlandnên hoạt động, với một dấu gạch chéo tùy chọn ở cuối. Bởi vì chúng ta cần một nhóm bổ sung cho /, các biến nằm trong nhóm chụp tiếp theo, vì vậy những gì đã $matches[1]trở thành $matches[2]$matches[2]trở thành $matches[4].

Nếu bạn muốn gỡ lỗi các quy tắc viết lại của mình, tôi khuyên bạn nên sử dụng plugin phân tích Rewrite của mình , nó cho phép bạn chơi với URL và xem các biến truy vấn kết quả.

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.