Почему apply_filter ('the_content') ничего не выводит? - PullRequest
4 голосов
/ 30 августа 2010

Я пробовал так много комбинаций php, чтобы wordpress выводил $ post-> post_content в виде форматированного текста (в отличие от необработанного форматирования, которое дает мне echo $post->post_content. Эта комбинация кажется наиболее перспективной, ноничего не выводится. Есть идеи?

(это строка: <?php $content = apply_filters('the_content', $s->post_content); ?>)

<?php query_posts('orderby=menu_order&order=asc&posts_per_page=-1&post_type=page&post_parent='.$post->ID); if(have_posts()) { while(have_posts()) { the_post(); ?>
    <div class="page">
        <?php
            global $wpdb;
            $subs = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent='$post->ID' AND post_type='page' AND post_status='publish'");
            if($subs) {
        ?>
        <div class="navi"></div>
        <a class="naviNext"><img src="<?php bloginfo('template_url'); ?>/images/navi-next.png" alt="" /></a>
        <div class="scrollable">
            <div class="items">
                <?php foreach($subs as $s) { ?>
                <div class="item">
                    <h2><?php echo $s->post_title; ?></h2>
                    <?php $content = apply_filters('the_content', $s->post_content); echo $content; ?>
                </div>
                <?php } ?>
            </div>
        </div>
        <?php } else { the_content(); } ?>
    </div>
    <?php } } wp_reset_query(); ?>

Ответы [ 7 ]

10 голосов
/ 05 сентября 2010

Насколько я знаю, функция, которая применяет основное «форматирование» к телу контента: wpautop () .Эта функция должна быть подключена к «the_content» с помощью WordPress.Функция действительно раздражает (например, портит код для встраивания), и существует множество плагинов, которые отсоединят ее от стека фильтров.Попробуйте заменить вашу строку:

<?php $content = apply_filters('the_content', $s->post_content); echo $content; ?>

на

<?php $content = wpautop($s->post_content); echo $content; ?>

Если это поможет, то у вас, вероятно, есть проблема с отсоединением wpautop где-нибудь.

2 голосов
/ 05 августа 2013

У меня была такая же проблема.Оказалось, что в моей теме была функция, которая также фильтровала the content, но в ней была ошибка, из-за которой фильтр возвращал пустую строку.

Так что проверьте свою тему и плагины на наличие функций, которые фильтруютthe_content.Например, в Sublime Text 2 вы можете быстро «найти в файлах» с помощью ⌘ / CTRL + + F , чтобы найти возможных виновников.

1 голос
/ 27 сентября 2011

man86,

Я вижу, что вы получаете данные поста через $ wpdb-> get_results (). Суть в том, что данные возвращаются необработанными, поэтому вам необходимо «подготовить их», прежде чем вы сможете использовать обычные функции публикации, такие как the_content () (которые будут возвращать уже отформатированный контент, как вы этого хотите ).

Как насчет этого (см. Комментарии к коду):

<?php query_posts('orderby=menu_order&order=asc&posts_per_page=-1&post_type=page&post_parent='.$post->ID); 

if(have_posts()) { while(have_posts()) { the_post(); ?>
<div class="page">
    <?php
        global $wpdb;
        $subs = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent='$post->ID' AND post_type='page' AND post_status='publish'");
        if($subs) { ?>
    <div class="navi"></div>
    <a class="naviNext"><img src="<?php bloginfo('template_url'); ?>/images/navi-next.png" alt="" /></a>
    <div class="scrollable">
        <div class="items">
            <?php foreach($subs as $post) { // <-- changed $s to $post
            setup_postdata($post) // <--use setup_postdata to prepare post
             ?>
            <div class="item">
                <h2><?php the_title(); // <-- use "the_title() now that the data has been prepared ?></h2>
                <?php the_content(); // <-- use "the_content() now that the data has been prepared ?>
            </div>
            <?php } ?>
        </div>
    </div>
    <?php } else { the_content(); } ?>
</div>
<?php } } wp_reset_query(); ?>

Ссылка: http://codex.wordpress.org/Class_Reference/wpdb#Examples_5 («Получить всю информацию о черновиках от пользователя 5»)

Спасибо, надеюсь, это поможет!

Уд.

0 голосов
/ 04 сентября 2010

хм .. по какой-то причине я могу получить контент для отображения, когда убрал верхнюю и нижнюю строки.

возможно, проблема в вызове query_posts .., а не в вызове apply_filters ().

Я могу переключать режим отображения в зависимости от того, использую ли я apply_filters () или нет. что я верю, что вы после.

0 голосов
/ 03 сентября 2010

Как вы добавляете фильтр? Вы можете использовать add_filter, который определяет функцию, которая будет получать $ content. С помощью этой функции вы можете выполнить любую фильтрацию, которая вам нужна.

http://codex.wordpress.org/Plugin_API#Create_a_Filter_Function

0 голосов
/ 30 августа 2010

Извините, если это слишком просто, но это может помочь, если вы повторили содержание:

<?php
$content = apply_filters('the_content', $s->post_content);
echo $content;
?>
0 голосов
/ 30 августа 2010

Вам нужно echo результаты вызова apply_filters:

<?php echo apply_filters('the_content', $s->post_content); ?>

Или, как у вас это закодировано:

<?php 
    $content = apply_filters('the_content', $s->post_content); 
    echo $content;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...