Ajax-специфический шаблон, не загружающий взамен index.php

После моего предыдущего сообщения ( Full-Ajax Theme: parseJSON error при создании объекта JSON из пользовательского шаблона WordPress ) в отношении нескольких проблем, связанных с JSON (теперь разрешено), я пытаюсь загрузить некоторые альтернативные шаблоны при вызове AJAX.

Короткая версия, если вы не хотите читать предыдущую запись:

На клике на определенной .ajax-link запрос отправляется через заголовок с помощью

 $.ajax({ url : url, type : 'POST', headers: { 'X-Requested-With':'MDXMLHttpRequest' } }).done(function() { //do stuff... }); 

Затем он вызывает связанную функцию в моем плагине:

 add_filter( 'template_include', 'md_template_include' ); function md_template_include( $template ) { if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH']== 'MDXMLHttpRequest' ): $pre = dirname( $template ); $suf = basename( $template ); $_template = $pre . '/ajax-' . $suf; if( !file_exists( $_template ) ) $_template = $template; $template = $_template; endif; return $template; } 

Что добавляет префикс ajax к имени шаблона и загружает его вместо обычного. Этот шаблон AJAX сжимается по контенту и пишет с помощью JSON для обработки данных.

Так как я в папке с плагинами, решение для загрузки шаблонов из папки плагина было следующим (это единственное решение, которое я нашел, я не уверен, что это хорошая практика …)

 function get_single_cpt_template($single_template) { global $post; if ($post->post_type == 'project') { $single_template = dirname( __FILE__ ) . '/templates/single-project.php'; } return $single_template; } 

Или снова для шаблона одиночного сообщения ajax:

 function get_ajax_single_cpt_template($ajax_single_template) { global $post; if ($post->post_type == 'project') { $ajax_single_template = dirname( __FILE__ ) . '/templates/ajax-single-project.php'; } return $ajax_single_template; } 

Все это хорошо работает! без проблем, действительно гладко, JS-доказательство (если JS отключено), а также оптимизированное для SEO … Это позволяет всему веб-сайту работать без AJAX и на основе API истории без API истории, AJAX отключен и навигация – хороший способ.

Проблема в том, что я не могу найти решение относительно файла index.php. Он не хочет загружать его с помощью AJAX в любом случае … Когда я нажимаю на логотип / заголовок своего сайта, он должен загружать ajax-index.php но он, похоже, не работает.

Я сделал тот же самый процесс, что и для других шаблонов … кроме условия:

 function get_ajax_index_template($ajax_index_template) { global $post; if (is_home_page()) { $ajax_index_template = dirname( __FILE__ ) . '/templates/ajax-index.php'; } return $ajax_index_template; } 

Есть идеи ? Думаю, что-то я забыл о иерархии шаблонов в WordPress? Спасибо за ваше время и вашу помощь.

ОБНОВИТЬ

Загружает полный шаблон index.php: если я смотрю на сетевые запросы в Firebug, есть «POST», но возвращаемое – index.php, а не ajax-index.php … Поэтому, JS сбой, потому что код не тот, который должен быть …

Solutions Collecting From Web of "Ajax-специфический шаблон, не загружающий взамен index.php"

В is_home_page() нет функции is_home_page() . У вас есть либо is_home() либо is_front_page() и вы должны быть осторожны в отношении двух. Они могут быть белки .

Я не знаю, какая из двух функций вам нужна, но их сортировка должна решить проблему или, возможно, использовать (is_home() || is_front_page()) .