如何正确使用函数. php custom_rewrite_rule()

plupiseo  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(214)

我正在使用WordPress,我已经将此函数添加到我的主题中的functions.php(基本的21):

function custom_rewrite_rule() {
    add_rewrite_rule('^profile/([^/]+)/(\d+)/?', 'index.php?page_id=104&name=$matches[1]&age=$matches[2]', 'top');
    flush_rewrite_rules(); // Flush rewrite rules to test the changes immediately
}
add_action('init', 'custom_rewrite_rule');

function display_profile_content() {
    $name = sanitize_text_field(get_query_var('name'));
    $age = intval(get_query_var('age'));

    echo 'Name: ' . $name . '<br>';
    echo 'Age: ' . $age . '<br>';
}
add_shortcode('profile_content', 'display_profile_content');

</code>

在特定的页面中,我正确地添加了简码,我的意图是,例如,如果转到
Website.com/page/Poul/21
应显示:
Name:life's a game
年龄:21岁
但无论我在URL中输入什么,它总是显示:
Name:zhang cheng
年龄:0
故障排除到目前为止:
我已经保存了永久链接页面以刷新该高速缓存。禁用所有插件更改为这个基本的主题,但似乎没有什么工作。
我该怎么办?

pinkon5k

pinkon5k1#

WP_Query不允许任何url参数,它有白名单参数列表,您可以使用钩子query_vars更改这些参数。
链接到query_vars
现在为了让它像这样工作。

function custom_rewrite_rule() {
    add_rewrite_rule('^profile\/([^/]+)\/(\d+)\/?', 'index.php?name=$matches[1]&age=$matches[2]', 'top');
    flush_rewrite_rules(); // Flush rewrite rules to test the changes immediately
}
add_action('init', 'custom_rewrite_rule');

add_filter( 'query_vars', function( $query_vars ) {
    $query_vars[] = 'age';
    return $query_vars;
} );
function display_profile_content() {
    global $wp_query;
    $name = sanitize_text_field(get_query_var('name'));
    $age = intval(get_query_var('age'));
    echo '<pre>';
    var_dump( $wp_query );
    echo '</pre>';

    echo 'Name: ' . $name . '<br>';
    echo 'Age: ' . $age . '<br>';
}
add_shortcode('profile_content', 'display_profile_content');

此外,您可能误解了正则表达式,因此rewrite_rules采用配置文件/{name}/{age}
所以你的URL应该是Website.com/profile/Poul/21
你可以在你的主题的index.php中添加这段代码来测试。

do_shortcode('[profile_content]');

相关问题