davehunt
  • 0
Новичок

Добавление файла темы для контента, отличного от WordPress

  • 0

У меня есть сторонний плагин событий, который использует пользовательские таблицы в базе данных. Я создал файл темы (event.php), который извлекает данные на основе слага, который в идеале указан в URL-адресе.

Я хочу создать собственное правило перезаписи URL-адреса для этого шаблона, поэтому такой URL-адрес:

/событие/мой-слаг

Будет вызывать файл event.php, захватывая конкретное запрошенное событие (слаг).

Класс, который я включаю в functions.php для этого:

<?php 
$EventpageCode = new Eventpage();
register_activation_hook( __file__, array($EventpageCode, 'activate') );

add_filter('rewrite_rules_array', array($EventpageCode, 'create_rewrite_rules'));
add_filter('query_vars',array($EventpageCode, 'add_query_vars'));

add_filter('admin_init', array($EventpageCode, 'flush_rewrite_rules'));
add_action('template_include', array($EventpageCode, 'template_redirect_intercept'));

class Eventpage {

    function activate() {
        global $wp_rewrite;
        $this->flush_rewrite_rules();
    }

    function create_rewrite_rules($rules) {
        global $wp_rewrite;
        $newRule = array('event/(.+)' => 'index.php?pagename=event&eventid='.$wp_rewrite->preg_index(1));
        $newRules = $newRule + $rules;
        return $newRules;
    }

    function add_query_vars($qvars) {
        $qvars[] = 'eventid';
        return $qvars;
    }

    function flush_rewrite_rules() {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

    function template_redirect_intercept($template) {
        global $wp_query;
        if ($wp_query->get('eventid')) {
            $template = locate_template( array( 'event.php' ) );
        }
        return $template;
    }

    function pushoutput($message) {
        $this->output($message);
    }

    function output( $output ) {
        header( 'Cache-Control: no-cache, must-revalidate' );
        header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );

        echo json_encode( $output );
    }
}
?>

Это отлично работает для отображения контента, за исключением того, что страница выдает ошибку 404 (но все же отображает контент). Любые предложения о том, как избежать возврата ошибки 404?

Share
  1. Просто удалите pagename=event& и сбросьте правила перезаписи…

    $newRule = array('event/(.+)' => 'index.php?eventid='.$wp_rewrite->preg_index(1));
    

    *template_include* — это фильтр, а НЕ действие!

    add_filter('template_include', array($EventpageCode, 'template_redirect_intercept'));
    

    Вы можете использовать функцию *wp_title* или фильтр, чтобы изменить заголовок страницы.

    • 0

Оставить ответ

You must login to add an answer.