Эмуляция статических страниц в WordPress
Когда для сайта не совсем подходит WordPress CMS, а очень хочется — разработчики идут на всякие хитрости, благо WordPress их предоставляет с головой.
Например выполнение собственных запросов уже в файлах темы ( query_posts).
Для этого обычно создают в панели управления статическую страницу, а в директории с темой — или же кастомную тему (/** Template name **/) или файл с именем page-(pageSlug).php или что еще хуже — page-(pageId).php. Для справок смотрите иерархию файлов в шаблонах WP
В этом подходе есть значительный минус — заказчик сайта, которому вы скорее всего передадите доступ к панели управления, может нечаянно или по незнанию удалить страницу чем нарушит работу сайта в целом.
Код:
<?php add_action('template_redirect','impress_template_redirect'); add_action('rewrite_rules_array','impress_add_rewrite_rule'); add_action('query_vars', 'impressweb_query_vars'); function impressweb_query_vars($qvars) { $qvars[] = 'pseudo_static_page'; $qvars[] = 'pseudo_static_title'; $qvars[] = 'pseudo_static_param1'; return $qvars; } function impress_template_redirect() { global $wp_query, $impress_pages_titles; //print_r($wp_query); if(get_query_var('pseudo_static_page')){ $queried_object = new stdClass; $queried_object->post_title = get_query_var('pseudo_static_title'); $wp_query->queried_object = $queried_object; $wp_query->queried_object_id = 1; $wp_query->found_posts = 1; $wp_query->is_page = 1 ; $wp_query->is_home = 0 ; $wp_query->post_count = 1; $template = array( "page-".get_query_var('pseudo_static_page').".php" ); locate_template( $template, true ); die(); } } function impress_add_rewrite_rule($rules) { global $impress_pages; $newrules = array(); $newrules['dnepropetrovsk/events-archive/?$'] = 'index.php?pseudo_static_page=events-archive&pseudo_static_param1=dnepropetrovsk&pseudo_static_title='.urlencode('Архив событий | Днепропетровск'); $newrules['dnepropetrovsk/events-calendar/?$'] = 'index.php?pseudo_static_page=events-calendar&pseudo_static_param1=dnepropetrovsk&pseudo_static_title='.urlencode('Календарь событий | Днепропетровск'); $newrules['dnepropetrovsk/event-announcements/?$'] = 'index.php?pseudo_static_page=event-announcements&pseudo_static_param1=dnepropetrovsk&pseudo_static_title='.urlencode('Анонс событий | Днепропетровск'); $newrules['/?$'] = 'index.php?pseudo_static_page=event-announcements&pseudo_static_param1=dnepropetrovsk&pseudo_static_title='.urlencode('Анонс событий | Днепропетровск'); $newrules['dnepropetrovsk/weekly-events/?$'] = 'index.php?pseudo_static_page=weekly-events&pseudo_static_param1=ukraine&pseudo_static_title='.urlencode('Еженедельные события | Днепропетровск'); $newrules['dnepropetrovsk/reports/?$'] = 'index.php?pseudo_static_page=reports&pseudo_static_param1=dnepropetrovsk&pseudo_static_title='.urlencode('Отчеты | Днепропетровск'); $newrules['ukraine/events-archive/?$'] = 'index.php?pseudo_static_page=events-archive&pseudo_static_param1=ukraine&pseudo_static_title='.urlencode('Архив событий | Украина'); $newrules['ukraine/events-calendar/?$'] = 'index.php?pseudo_static_page=events-archive&pseudo_static_param1=ukraine&pseudo_static_title='.urlencode('Календарь событий | Украина'); return $newrules + $rules; } ?>