Салют всем. Я создаю постоянные динамические ссылки в WordPress вида:
домен/страна/город/университет. По типу как здесь:
https://ischoolconnect.com/en/universities/usa/mas...
Имеется:
index.php – каталог с университетами
university.php – страница университета и описанием:
<?php
/*
Template Name: University Template
*/
?>
Что я делаю
1. Для достижения нужной структуры ссылок в functions.php:
/* Start: Register Post Type (Universities Pages) */
function custom_post_type_universities_pages() {
$labels = array(
'name' => _x('Universities Pages', 'post type general name', 'wp-universities'),
'singular_name' => _x('Universities Page', 'post type singular name', 'wp-universities'),
);
$args = array(
'labels' => $labels,
'public' => true,
'supports' => array('title','editor','author','comments'),
'rewrite' => array('slug' => 'country/city/university'),
);
register_post_type('universities_page', $args);
}
add_action('init', 'custom_post_type_universities_pages');
/* Start: Rewrite URL's */
function custom_rewrite_tags() {
add_rewrite_tag('%country%', '([^&]+)');
add_rewrite_tag('%city%', '([^&]+)');
add_rewrite_tag('%university%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tags');
function custom_rewrite_rules() {
add_rewrite_rule('([^/]+)/([^/]+)/([^/]+)/?$', 'index.php?post_type=universities_page&country=$matches[1]&city=$matches[2]&university=$matches[3]', 'top');
}
add_action('init', 'custom_rewrite_rules');
2. На странице index.php:
<a href="<?php echo home_url($university_data->country . '/' . $university_data->city . '/' . $university_data->slug); ?>">
<?php echo esc_html($university_data->name); ?>
</a>
3. Устанавливаю кастомные пермалинки в WordPress: домен//%country%/%city%/%university%/
4. В админ панели в разделе Страницы создаю страницу University Page с постоянной ссылкой «university» и шаблоном «University Template»
5. Размещаю в шапке на странице university.php:
<?php
/*
Template Name: University Template
*/
// map this template to a page that has the slug "custom-page"
$country = get_query_var('country');
$city = get_query_var('city');
$university = get_query_var('university');
get_header();
?>
<!-- Запрос к БД -->
<?php
// Получение значения slug из URL
$slug = isset($wp_query->query_vars['university_slug']) ? sanitize_text_field($wp_query->query_vars['university_slug']) : '';
// Проверка наличия slug
if ($slug) {
global $wpdb;
// Запрос для получения информации о университете по slug
$query = $wpdb->prepare("SELECT u.*, l.file_path, a.country, a.city, r.global, r.regional, r.qs, r.times, r.us_news
FROM {$wpdb->prefix}universities u
LEFT JOIN {$wpdb->prefix}logos l ON u.university_id = l.university_id
LEFT JOIN {$wpdb->prefix}address a ON u.university_id = a.university_id
LEFT JOIN {$wpdb->prefix}rank r ON u.university_id = r.university_id
WHERE u.slug = %s", $slug);
$university_data = $wpdb->get_row($query);
?>
Что ожидание: после внесения изменений в код при клике на ссылку
<a href="<?php echo home_url($university_data->country . '/' . $university_data->city . '/' . $university_data->slug); ?>"><?php echo esc_html($university_data->name); ?></a>
открывается страница университета university.php c URL
домен/страна/город/страница университета.
Что получаю: после внесения изменений в код при клике на ссылку
<a href="<?php echo home_url($university_data->country . '/' . $university_data->city . '/' . $university_data->slug); ?>"><?php echo esc_html($university_data->name); ?></a>
открывается страница index.php c URL
домен/страна/город/страница университета.
Вопрос: Где допущена ошибка? Ввиду моих, на момент написания вопроса, малых знаний в WordPress полагаю, что при перезаписи и использовании функций «rewrite_tag» и «rewrite_rule».
Ориентировался при решении вопроса на
статью.