Wordpress重写规则、端点并显示适当的模板



我收到了一项任务,要求我创建一个新的端点/permalink。

类似于www.myswebsite.com/users,其中将显示用户列表。然后www.mywebsite.com/users/1将显示用户1的信息。

那部分如果完成了。我已经设置了url,访问url为用户提供了合适的模板。个人信息按预期显示。

然而。。。我犯了一个错误,因为users.php模板正在为所有其他URL显示。因此,基本urlwww.mywebsite.com也显示了www.mywebsite.com/users模板。我该怎么解决这个问题?

下面是我的插件中的代码。如果你需要我提供更多信息,请毫不犹豫地询问。

我知道我的问题出在get_new_template函数上,但我并不精通Wordpress来确定正确的if/else块。

<?php
/*
* Plugin Name: User Endpoint
* Description: Providing An Endpoint For Data Consumption
* Version: 1.0.0
*/
// Add a new var to query vars
function result_add_query_vars( $vars ){
$vars[] = 'users';
return $vars;
}
add_filter( 'query_vars', 'result_add_query_vars' );
// Register ReWrite-Rules
function myplugin_rewrite_tag_rule() {
add_rewrite_endpoint( 'users', EP_ROOT );
add_rewrite_rule(
'^users/([^/]*)/?',
'index.php?pagename=$matches[1]&param=foo',
'top'
);
}
add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);
// Register Template To Show At End POint
function get_new_template( $original_template ) {
if ( get_query_var('users/') ) {
return dirname(__FILE__) . '/user.php';
}   else {
return dirname(__FILE__) . '/users.php';
}
}
add_filter( 'template_include', 'get_new_template' );
// Flush Permalinks
function flush_permalinks() {
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'flush_permalinks');

您告诉WP在这里对所有页面使用相同的模板,而您没有为与您的情况匹配的其他页面返回原始模板。请参阅下面的代码进行修复:

// Register Template To Show At End Point
function get_new_template($original_template)
{
global $wp_query;
// /users or /users/xxxx
if (isset($wp_query->query['users'])) {
// "user id"
$page = $wp_query->query['users'];
$template = $page >= 1 ? '/user.php' : '/users.php';
return dirname(__FILE__) .  $template;
}
return $original_template;
}
add_filter('template_include', 'get_new_template');

最新更新