Wordpress переписать правила, конечные точки и показать соответствующий шаблон - PullRequest
0 голосов
/ 02 апреля 2020

Мне дали задание, которое требует от меня создания новой конечной точки / постоянной ссылки.

Что-то вроде www.myswebsite.com/users, где будет показан список пользователей. Тогда www.mywebsite.com/users/1 покажет информацию о пользователе 1.

ЭТО часть, если сделано. У меня есть URL-адрес, посещение URL-адреса служит соответствующий шаблон для пользователя. Индивидуальная информация отображается как и предполагалось.

Однако ... Я делаю ошибку, потому что шаблон users.php отображается для ВСЕХ других URL-адресов. Таким образом, базовый URL www.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');

1 Ответ

1 голос
/ 02 апреля 2020

Вы говорите 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...