Как применить фильтр (apply filter the content в функции get the content WordPress?
Я разрабатываю тему WordPress, хобби и немного изучить PHP, JavaScript, etc. и я столкнулся с небольшой проблемой.
Я работаю с концепцией контроллер, где вся логика обрабатывается и затем отправлен на каналы. Чтобы сделать более ясным, как структурирована моя тема я буду передавать моя структура каталогов:
controller-single.php
будет контролировать данные, которые будут отображаться в single.php
в нем я определяю класс Controller_Single
, который будет управлять содержимое страницы/сообщения, а затем я называю необходимые элементы для отображения контента:
<?php
require_once __DIR__ . '/../security.php';
class Controller_Single {
public function __construct() {
add_filter( 'get_single_content', array( $this, 'get_single_content' ) );
}
public function get_single_content() {
$single_content = new StdClass();
$single_content->title = get_the_title(); // Título do Post
$single_content->author = get_the_author(); // Autor do Post
$single_content->date = get_the_date(); // Data de publicação
$single_content->content = get_the_content(); // Conteúdo do Post
return $single_content;
}
}
new Controller_Single();
И в моем single.php я выполняю вызов содержимого:
<?php
get_header();
the_post();
$single_post = apply_filters( 'get_single_content', false );
?>
<header class="glory-header">
<div class="glory-header-title">
<h2><?php echo $single_post->title ?></h2>
<p>Publicado por: <span><?php echo $single_post->author ?></span> em <?php echo $single_post->date ?></p>
</div>
<div class="glory-header-overlay"></div>
</header>
<div class="glory-page-body">
<?php echo $single_post->content ?>
</div>
<?php get_footer() ?>
проблема В том, что, как я использую get_the_content();
controller.php вместо the_content();
WordPress не осуществляет auto embeds, что является проблемой для меня, поскольку я буду работать с shortcodes, галереи, etc.
однако, если я использование the_content();
содержимое пост появляется сразу после открывающего тега <body>
и, следовательно, выше всех элементов страницы (header, nav, etc.).
я читал о возможности обойти это, однако, не мог найти функциональное решение для этой проблемы.
1 answers
В контроллере вы можете применить фильтр the_content
вскоре, что поиск содержания, например:
<?php
require_once __DIR__ . '/../security.php';
class Controller_Single {
public function __construct() {
add_filter( 'get_single_content', array( $this, 'get_single_content' ) );
}
public function get_single_content() {
$single_content = new StdClass();
$single_content->title = get_the_title(); // Título do Post
$single_content->author = get_the_author(); // Autor do Post
$single_content->date = get_the_date(); // Data de publicação
$single_content->content = apply_filters( 'the_content', get_the_content() ); // Conteúdo do Post
return $single_content;
}
}
new Controller_Single();