#php #wordpress #plugins
#php #wordpress #Плагины
Вопрос:
я добавил следующий код для использования пользовательского шаблона для одностраничной страницы моих рецептов
function override_single_template( $single_template ){
global $post;
if ($post->post_type == "recipes"){
$single_template = plugins_url('/recipe-single-page-template.php',__FILE__);
}
return $single_template;
}
add_filter( 'single_template', 'override_single_template',10);
и в моем шаблоне я добавил следующий код
<?php
/*
Template Name: recipe-single-page-template
Template Post Type: recipes
*/
require_once("../../../wp-load.php");
?>
<?php get_header(); ?>
<?php echo $post->ID?>
<?php get_footer(); ?>
но я не получаю доступ к сообщению, и эхо-идентификатор сообщения вызывает следующую ошибку
Trying to get property of non-object
var dump $post выводит значение null
NULL
и следующий код распечатает адрес моего пользовательского шаблона
$current_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo $current_url;
лучший результат кода:
https://charter.test/wp-content/plugins/recipe-plugin/templates/single-recipes.php
теперь, что мне делать?
Ответ №1:
Вы пытаетесь перенаправить пользовательский тип сообщения с именем recipes в пользовательский шаблон? Вам не нужно переопределять, по умолчанию wordpress имеет встроенную систему динамического отображения контента.
В вашем случае при отображении рецепта он сначала будет искать single-recipe.php
, если не найден, запасной single.php
вариант, если не найден, запасной 404.php
вариант и, наконец, index.php
Вам просто нужно создать файл с именем single-recipe.php
.
Ваша вторая проблема заключается в том, что в вашем файле не отображается цикл, вы должны сообщить wordpress, что если сообщение существует, оно должно извлечь его и представить вам. Для этого мы используем систему циклов.
Ваш single-recipe.php
файл должен выглядеть примерно так:
<?php
/**
* Get theme header
*/
get_header();
/**
* Start loop
*/
if ( have_posts() ):
while ( have_posts() ):
the_post();
/**
* If we find a post, output the tilte
*/
echo the_title().'<br/>';
/**
* End loop
*/
endwhile;
endif;
/**
* Get theme footer
*/
get_footer(); ?>
Комментарии:
1. спасибо за ваш ответ. у меня это не работает. я пытаюсь добавить свой пользовательский шаблон из плагина, а не из их папки. я добавил ваш код в свой файл шаблона, и он не показал