Шаблон страницы архива пользовательского типа Wordpress Post не отображается

Я создаю плагин и добавляю пользовательский тип сообщений ssd_vehicles. Одностраничный шаблон работает и использует файлы шаблонов, которые я установил в фильтре «single_template», но «archive_template» не работает, он переходит в состояние is_post_type_archive ( 'ssd_vehicles' ), но не использует файл шаблона, который я возвращаю в «archive_template».

ssd-plugin.php

register_post_type('ssd_vehicles',
   array(
            'labels'      => array(
                'name'          => __('SSD Vehicles', 'textdomain'),

                'singular_name' => __('SSD Vehicle', 'textdomain'),
            ),
                'public'      => true,
                'has_archive' => 'ssd_vehicles',
                'rewrite'     => array( 'slug' => 'ssd_vehicle' ),
                'supports' => array( 'title', 'editor', 'custom-fields' ),
        )

    );

add_filter('single_template', array('MyClass','create_single_template'));
add_filter('archive_template', array('MyClass','create_archive_template'));

public static function create_single_template( $single_template ){
    
    global $post;   
    if ( 'ssd_vehicles' === $post->post_type ) {
        //THIS WORKS AND DISPLAYS THE CORRECT TEMPLATE FILE

        $single_template = dirname( __FILE__ ) . '/templates/single-ssd_vehicles.php';
    }
    return $single_template;
}

public static function create_archive_template( $archive_template ){
    global $post;   
    if ( is_post_type_archive ( 'ssd_vehicles' ) ) {

        //CODE GOES HERE BUT THE THIS TEMPLATE FILE IS NOT BEING USED
        $archive_template = dirname( __FILE__ ) . '/templates/archive-ssd_vehicles.php';
    }
   
    return $archive_template;
}

person Andrei dev    schedule 30.03.2021    source источник
comment
Я редко видел использование строки в параметре 'has_archive' =>, а затем ее перезаписывали в следующем параметре. Возможно, просто попробуйте изменить это, чтобы иметь значение «истина». Вот так 'has_archive' =› true   -  person DubVader    schedule 30.03.2021
comment
Я хотел, чтобы на странице архива использовалось множественное число шаблона одной страницы, поэтому example.com/ssd_vehicles (архив) и example.com/ssd_vehicle/{название транспортного средства} для (один)   -  person Andrei dev    schedule 30.03.2021
comment
@DubVader уже пытался изменить его на настоящую страницу архива, которую я сделал, не отображается, но что-то отображает в файлах шаблона.   -  person Andrei dev    schedule 30.03.2021
comment
Понял. Еще одна вещь, которую вы можете попробовать, — сбросить правила перезаписи или пересохранить постоянные ссылки.   -  person DubVader    schedule 30.03.2021


Ответы (2)


Разве вызов класса не должен требовать класса? array( 'MyClass', 'create_single_template' );. Кажется, это работает на моем конце.

add_filter( 'single_template', array( 'MyClass1', 'create_single_template' ) );
class MyClass1 {
    public static function create_single_template( $single_template ){ 
        if ( is_singular( 'ssd_vehicles' ) ) {
            $single_template = dirname( __FILE__ ) . '/templates/single-ssd_vehicles.php';
        };
        return $single_template;
    }
};

add_filter( 'archive_template', array( 'MyClass2', 'create_archive_template' ) );
class MyClass2 {
    public static function create_archive_template( $archive_template ) { 
        if ( is_post_type_archive ( 'ssd_vehicles' ) ) {
            $archive_template = dirname( __FILE__ ) . '/templates/archive-ssd_vehicles.php';
        };
        return $archive_template;
    }
};

Кроме того, чтобы отойти от глобальной переменной в WordPress, $global $post для получения post_type можно заменить на get_post_type() или is_singular( 'custom_post_type_slug' ). Вы также можете удалить весь класс и переключиться на прямые функции, чтобы упростить задачу (поскольку они, похоже, не играют реальной роли прямо сейчас).

person amarinediary    schedule 30.03.2021
comment
Извините, я не упомянул, что существует существующий MyClass, в котором находится одиночный и архивный шаблон в плагине. Проблема в том, что эти методы выполняются, как показано в комментариях к коду, но шаблон архива, используемый для страницы архива для моего пользовательского типа сообщения, отличается, поэтому, например, я повторил HELLO WORLD на archive-ssd_vehicles.php, он не отображается up Я думаю, это означает только одно: созданный мной шаблон архива переопределяется другим шаблоном. - person Andrei dev; 05.04.2021

Кажется, что elementor переопределяет мой пользовательский шаблон архива. Я попытался отключить и включить плагины, и, похоже, это работает, но когда elementor pro активен, он переопределяет шаблон.

person Andrei dev    schedule 06.04.2021