я не могу получить доступ к сообщению в пользовательском шаблоне моего плагина WordPress

#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. спасибо за ваш ответ. у меня это не работает. я пытаюсь добавить свой пользовательский шаблон из плагина, а не из их папки. я добавил ваш код в свой файл шаблона, и он не показал