为什么apply_filter('the_content')输出什么?

时间:2010-08-30 17:58:20

标签: php wordpress post

我已经尝试过这么多的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 个答案:

答案 0 :(得分:10)

据我所知,将主要“格式化”应用于内容正文的功能是wpautop()。该功能应该通过wordpress连接到'the_content'。该函数确实做了烦人的事情(比如搞乱嵌入代码),并且有很多插件会从过滤器堆栈中取消它。尝试更换你的行:

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

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

如果这有帮助,那么你可能会遇到一个问题在某个地方被取消了。

答案 1 :(得分:2)

我遇到了同样的问题。事实证明我的主题中有一个函数,它也过滤了the content,但它有一个错误,导致过滤器返回一个空字符串。

因此请检查您的主题和插件是否有过滤the_content的功能。例如,在Sublime Text 2中,您可以使用⌘/ CTRL + + F 快速“查找文件”以查找可能的罪魁祸首。

答案 2 :(得分:1)

man86,

我看到你通过$ wpdb-&gt; 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的草稿的所有信息”)

谢谢,我希望有所帮助!

VQ。

答案 3 :(得分:0)

您需要echo apply_filters来电的结果:

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

或者,正如你已经编码的那样:

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

答案 4 :(得分:0)

很抱歉,如果这太基础了,但如果您回复内容可能会有所帮助:

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

答案 5 :(得分:0)

您是如何添加过滤器的?您可以使用add_filter指定将接收$ content的函数。您可以通过此功能进行任何所需的过滤。

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

答案 6 :(得分:0)

嗯......出于某种原因,当我删除顶线和底线时,我可以显示内容。

问题可能是query_posts调用..而不是apply_filters()调用。

我可以根据是否使用apply_filters()来切换显示模式。我相信你所追求的是什么。