GIẢI PHÁP
Tôi đã đi với Bản cập nhật 3 và đã làm cho nó hoạt động. Điều tôi đã hiểu lầm là tôi tin rằng một quy tắc viết lại sẽ thay đổi designers/?designer=some-designer&bid=9
thành /designers/some-designer
. Nhưng tất nhiên đó là cách khác.
Tôi đã thực hiện một số nghiên cứu, nhưng tôi hoàn toàn không biết cách sử dụng add_rewrite_rule () .
Bài đăng này khá gần với những gì tôi cần, nhưng tôi có thực sự cần nhiều mã không?
Liên kết hiện tại của tôi là thế này:
http://www.norwegianfashion.no/designers/?designer=Batlak-og-Selvig&bid=9
Những gì tôi muốn đây là
http://www.norwegianfashion.no/designers/Batlak-og-Selvig /
- Làm thế nào để tôi sử dụng
add_rewrite_rule()
? - Tôi cần phải vượt qua ID nhà thiết kế (giá thầu). Làm thế nào tôi có thể làm điều đó khi sử dụng các quy tắc re.write mà không hiển thị trong URL?
Cập nhật 1
Tôi tìm thấy điều này là một chút giải thích. Nhưng nó không hoạt động:
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array(
'('.$template_page_name.')/designers/(.*?)/?([0-9]{1,})/?$' => 'designers.php?designer='.
$wp_rewrite->preg_index(1).'&bid='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');
function query_vars($public_query_vars) {
$public_query_vars[] = "designer";
$public_query_vars[] = "bid";
return $public_query_vars;
}
add_filter('query_vars', 'query_vars')
Cập nhật 2
Đây là một giải pháp khác mà tôi đã thử, Jan Fabry gợi ý trong một chủ đề khác. Tôi đặt cái này trong hàm.php, nhưng nó không có tác dụng.
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');
/* Custom re-write rules for desigenrs
------------------------------------------------------------------------------*/
function add_rewrite_rules( $wp_rewrite )
{
add_rewrite_rule('^designers/([^/]*)/([^/]*)$ /designers/?designer=$1&bid=$2 [L]', 'top');
flush_rewrite_rules(false);
}
function query_vars($public_query_vars) {
$public_query_vars[] = "designer";
$public_query_vars[] = "bid";
return $public_query_vars;
}
Cập nhật 3
Tôi cũng tìm thấy một vài ví dụ ở đây . Nhưng điều này cũng không hoạt động :(
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');
// Remember to flush_rules() when adding rules
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
$newrules = array();
$newrules['(designers)/(\d*)$'] = 'index.php?pagename=designers&designer=$matches[1]';
return $newrules + $rules;
}
// Adding the bid var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars)
{
array_push($vars, 'designer');
return $vars;
}
Cập nhật 4 Tôi cũng đã thử giải pháp này, nhưng vẫn không thành công.
add_filter('search_rewrite_rules', 'designers_createRewriteRules');
function designers_createRewriteRules($rewrite) {
global $wp_rewrite;
// add rewrite tokens
$designer_token = '%designers%';
$wp_rewrite->add_rewrite_tag($designer_token, '(.+)', 'designers=');
$bid_token = '%bid%';
$wp_rewrite->add_rewrite_tag($bid_token, '(.+)', 'bid=');
$keywords_structure = $wp_rewrite->root . "designers/$designer_token/$bid_token";
$keywords_rewrite = $wp_rewrite->generate_rewrite_rules($keywords_structure);
return ( $rewrite + $keywords_rewrite );
}
Cập nhật 5
Có vẻ như các quy tắc viết lại của tôi không được thêm vào. Thực hiện các quy tắc mới sau khi phát ra các quy tắc mới : print_r($wp_rewrite)
, không bao gồm các quy tắc viết lại mới của tôi.
Cập nhật 6
Tôi đã thử nghiệm giải pháp của Jan. Nhưng URL không thay đổi :(
/* Initiation script for NF template
------------------------------------------------------------------------------*/
add_action('after_setup_theme','norwegianfashion_setup');
if ( ! function_exists( 'norwegianfashion_setup' ) ):
function norwegianfashion_setup() {
/* Here I do a lot of stuff */
// SEO friendly URL for desigenrs
add_action( 'init', 'wpa5413_init' );
add_filter( 'query_vars', 'wpa5413_query_vars' );
}
endif;
/* Custom re-write rules for desigenrs
------------------------------------------------------------------------------*/
function wpa5413_init()
{
// Remember to flush the rules once manually after you added this code!
add_rewrite_rule(
'designers/([^/]+)/?',
'index.php?pagename=designers&designer=$matches[1]',
'top' );
}
function wpa5413_query_vars( $query_vars )
{
$query_vars[] = 'designer';
return $query_vars;
}
Tôi thực sự sẽ đánh giá cao nó nếu ai đó có thể giúp tôi giải quyết vấn đề này.
bid
?
slug
gì? `Truy xuất dữ liệu Nhà thiết kế dễ dàng hơn nhiều bằng cách sử dụng bid
thay vìdesigner