Как применить фильтр (apply filter the content в функции get the content WordPress?


Я разрабатываю тему WordPress, хобби и немного изучить PHP, JavaScript, etc. и я столкнулся с небольшой проблемой.

Я работаю с концепцией контроллер, где вся логика обрабатывается и затем отправлен на каналы. Чтобы сделать более ясным, как структурирована моя тема я буду передавать моя структура каталогов:

inserir a descrição da imagem aqui

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.).

я читал о возможности обойти это, однако, не мог найти функциональное решение для этой проблемы.

Author: Jamil Filho, 2016-10-11

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();
 1
Author: Ricardo Moraleida, 2016-10-19 12:40:33