Не находится нужный шаблон в теме

236
10 октября 2018, 00:10

Есть тема DFD Native для wordpress, там есть тип страниц - портфолио. Если создать страницу с таким урл - http://sitename.com/portfolio то при открытии этой страницы во фронтенде, подгружается архивный шаблон для портфолио, а нужно чтобы подгружался специальный шаблон для портфолио.
Этот шаблон выбирается при создании страницы сбоку:

А если создать страницу портфолио с таким урл - http://sitename.com/portfolio1 , то загружается правильный шаблон для портфолио.
В чём может быть проблема?

файл index.php в корне темы

<?php if ( ! defined( 'ABSPATH' ) ) { exit; }
get_header();
get_template_part('inc/loop/components/layout');
if(class_exists('Dfd_Layout_Builder')) {
    new Dfd_Layout_Builder(array(
        'loop' => 'loop',
        'page' => 'post',
        'class' => 'dfd-blog-loop'
    )); 
}
get_footer();

файл archive.php в корне темы

<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }
$post_type = get_post_type();
if($post_type == 'portfolio') {
    get_template_part('taxonomy-portfolio');
} elseif($post_type == 'gallery') {
    get_template_part('taxonomy-gallery');
} else {
    get_template_part('index');
}

файл taxonomy-portfolio.php в корне темы

get_header();
get_template_part('inc/loop/components/layout');
if(class_exists('Dfd_Layout_Builder')) {
    new Dfd_Layout_Builder(array(
        'loop' => 'loop',
        'page' => 'portfolio_archive',
        'class' => 'dfd-portfolio-loop'
    ));
}
get_footer();

тут убирал _archive в ключе page, ничего не помогло.

класс Dfd_Layout_Builder

    class Dfd_Layout_Builder {
        /** @var string Current page type. */
        private $page_type = '';
        /**
         * Constructor.
         *
         *
         * @since 1.0
         * @access private
         */
        function __construct($args) {
            $this->page_type = $this->get_page_type();
            $defaults = array(
                'loop' => 'loop',
                'page' => 'page',
                'class' => 'no-ttile',
            );
            $args = wp_parse_args($args, $defaults);
            $this->build_layout($args['loop'], $args['page'], $args['class']);
        }
        /**
         * Get the layout width option value
         *
         * @since 1.0
         * @access public
         */
        function get_layout_width($page) {
            $layout_width = DfdMetaBoxSettings::get('dfd_layout_width');
            if(!$layout_width || empty($layout_width)) {
                global $dfd_native;
                $layout_width = isset($dfd_native[$page.'_layout_width']) ? $dfd_native[$page.'_layout_width'] : 'boxed';
            }
            return $layout_width;
        }
        /**
         * Check if custom header is enabled for current page
         *
         * @since 1.0
         * @access public
         */
        function get_stunning_header($page) {
            $stun_header_enabled = DfdMetaBoxSettings::get('dfd_stun_header');
            if(!$stun_header_enabled || empty($stun_header_enabled)) {
                global $dfd_native;
                $stun_header_enabled = isset($dfd_native[$page.'_stun_header']) ? $dfd_native[$page.'_stun_header'] : 'on';
            }
            if($stun_header_enabled == 'on') {
                get_template_part('templates/header/stunning-header');
            }
        }
        /**
         * Get the default page type to load default settings if no specific options were defined for current page from theme options or page metaboxes
         *
         * @since 1.0
         * @access public
         */
        function get_page_type() {
            $page_type = 'pages';
            if(is_404()) {
                $page_type = '404';
            }
            if(is_search()) {
                $page_type = 'search';
            }
            if(is_single()) {
                $page_type = 'single';
            }
            if(is_archive()) {
                $page_type = 'archive';
            }
            return $page_type;
        }
        /**
         * Generate sidebars configuration and 
         *
         * @since 1.0
         * @access public
         */
        function build_sidebar_config($loop, $page, $layout_width) {
            $item_sidebars = DfdMetaBoxSettings::get('dfd_sidebars_configuration');
            if(!$item_sidebars || empty($item_sidebars)) {
                global $dfd_native;
                $item_sidebars = isset($dfd_native[$page.'_sidebars_configuration']) ? $dfd_native[$page.'_sidebars_configuration'] : '';
                if(!class_exists('Dfd_Theme_Extensions')) {
                    $item_sidebars = '2c-r-fixed';
                }
            }
            $default = $this->page_type;
            $sidebars_count = 0;
            $this->top_dropdowns($page);
            if($item_sidebars && !empty($item_sidebars)) {
                switch($item_sidebars) {
                    case '2c-l-fixed':
                        $dfd_layout = 'sidebar-left';
                        $dfd_width = 'nine';
                        break;
                    case '2c-r-fixed':
                        $dfd_layout = 'sidebar-right';
                        $dfd_width = 'nine';
                        break;
                    case '3c-fixed':
                        $dfd_layout = 'sidebar-both';
                        $dfd_width = 'six';
                        break;
                    case '1col-fixed':
                    default:
                        $dfd_layout = 'no-sidebars';
                        $dfd_width = 'twelve';
                }
                $sidebars_count = (int) substr($item_sidebars, 0, 1) - 1;
                echo '<div class="blog-section ' . esc_attr($dfd_layout) . '">';
                echo '<section id="main-content" role="main" class="' . esc_attr($dfd_width) . ' columns">';
            } else {
                Dfd_Theme_Helpers::set_layout($default, true);
            }
            get_template_part('inc/loop/components/loop');
            new Dfd_Loop_Builder($loop, $page, $sidebars_count, $layout_width);
            if($page != 'product_single' && $page != 'shop') {
                comments_template();
            }
            if(!empty($item_sidebars) && $item_sidebars) {
                echo ' </section>';
                if (($item_sidebars == "2c-l-fixed") || ($item_sidebars == "3c-fixed")) {
                    get_template_part('templates/sidebar', 'left');
                    echo ' </div>';
                }
                if (($item_sidebars == "2c-r-fixed") || ($item_sidebars == "3c-fixed") || ($item_sidebars == "3c-r-fixed") ) {
                    get_template_part('templates/sidebar', 'right');
                }
                echo '</div>';
            } else {
                Dfd_Theme_Helpers::set_layout($default, false);
            }
        }
        /**
         * Generate layout and insert sidebars config
         *
         * @since 1.0
         * @access public
         */
        function build_layout($loop, $page, $class) {
            $layout_width = $data_atts = '';
            $page_type = $this->page_type;
            $class .= ' '.$page_type;
            if($page_type == 'pages' || $page_type == 'single' || $page_type == 'archive' || $page_type == '404') {
                $layout_width .= $this->get_layout_width($page);
            }
            $this->get_stunning_header($page);
            $vc_content_position = DfdMetaBoxSettings::compared($page.'_vc_content_position', '');
            $lazy_load_offset = DfdMetaBoxSettings::get('reduce_lazy_load_offset', '');
            if($lazy_load_offset && $lazy_load_offset == 'on') {
                $data_atts .= 'data-lazy-load-offset="1"';
            }
            echo '<section id="layout" class="'.esc_attr($class).'" '.$data_atts.'>';
                if($vc_content_position == 'top') {
                    $this->add_composer_content($page);
                }
                echo '<div class="row '.esc_attr($layout_width).'">';
                    $this->build_sidebar_config($loop, $page, $layout_width);
                echo '</div>';
                if($vc_content_position != 'top') {
                    $this->add_composer_content($page);
                }
            echo '</section>';
        }
        /**
         * Generate Visual Composer content for pages where posts, portfolio or gallery content is displayed
         *
         * @since 1.0
         * @access public
         */
        function add_composer_content($page = 'page') {
            $avail_templates = array('post', 'portfolio', 'gallery');
            if(in_array($page, $avail_templates) && $this->page_type != 'search') {
                if(have_posts()) {
                    echo '<div class="dfd-content-wrap dfd-vc-content-wrap">';
                    while (have_posts()) : the_post();
                        $content = get_the_content();
                        if(substr_count($content, 'post-password-form') == 0) {
                            the_content();
//                          Dfd_Theme_Helpers::dfd_link_pages();
                            echo Dfd_Theme_Helpers::dfd_pagination();
                        }
                        unset($content);
                    endwhile;
                    echo '</div>';
                }
            }
        }
        /**
         * Generate categories, tags and authors dropdown sorters
         *
         * @since 1.0
         * @access public
         */
        function top_dropdowns($page) {
            if(DfdMetaBoxSettings::compared($page.'_cat_tag', 'off') == 'on' && !is_single() && !is_search()) {
                get_template_part('templates/'.$page, 'top');
            }
        }
    }

P.S.

add_filter('template_include', 'my_template');
function my_template( $template ) {
// если это страница со слагом portfolio, используем файл шаблона page-portfolio.php
// используем условный тег is_page()

    if( is_page('portfolio') ){
        $files = array(
            'tmp-portfolio.php',
            'portfolio.php',
            'tmp-page.php',
            'tmp-blog.php',
        );
        if ( $new_template = locate_template( $files ) )
            return $new_template ;
    }
    return $template;
}
Answer 1

подключите нужный вам шаблон страницы в function.php

// фильтр передает переменную $template - путь до файла шаблона. // Изменяя этот путь мы изменяем файл шаблона.

add_filter('template_include', 'my_template');
function my_template( $template ) {
// если это страница со слагом portfolio, используем файл шаблона page-portfolio.php
// используем условный тег is_page()

if( is_page('portfolio') ){
        if ( $new_template = locate_template( array( 'page-portfolio.php' ) ) )
            return $new_template ;
    }
# шаблон для группы рубрик
// этот пример будет использовать файл из папки темы tpl_special-cats.php, 
// как шаблон для рубрик с ID 9, названием "Без рубрики" и слагом "php"

if( is_category( array( 9, 'Без рубрики', 'php') ) ){
        return get_stylesheet_directory() . '/tpl_special-cats.php';
    }
# шаблон для записи по ID
// файл шаблона расположен в папке плагина /my-plugin/site-template.php

global $post;
    if( $post->ID == 12 ){
        return wp_normalize_path( WP_PLUGIN_DIR ) . '/my-plugin/site-template.php';
    }
# шаблон для страниц произвольного типа "book"
// предполагается, что файл шаблона book-tpl.php лежит в папке темы

global $post;
    if( $post->post_type == 'book' ){
        return get_stylesheet_directory() . '/book-tpl.php';
    }
    return $template;
}
READ ALSO
Не отображается изображение

Не отображается изображение

Если закомментировать header, то выведется символы изображения

170
Как из ответа json выводить только баланс

Как из ответа json выводить только баланс

Приходит ответ от сервера в формате json, надо вывести только баланс, как это сделать ?

160
Как создать XML и сжать его?

Как создать XML и сжать его?

Создаю xml таким образом

463
Email из VK. Laravel

Email из VK. Laravel

Отвалилась авторизация Вконтакте с ошибкой, аналогично Laravel перестала работать авторизация ВКонтакте

195