通过短码创建的POST循环不在内容中显示短码

时间:2011-02-23 作者:Norcross

我一直在绞尽脑汁。下面是我创建的一个短码循环,用于显示特定的帖子类型:

    function faq_shortcode($atts, $content = NULL) {
        extract(shortcode_atts(array(
            \'faq_topic\' => \'\',
            \'faq_tag\'   => \'\',
            \'faq_id\'    => \'\',
            \'limit\'     => \'10\',
        ), $atts));
        $faq_topic = preg_replace(\'~&#x0*([0-9a-f]+);~ei\', \'chr(hexdec("\\\\1"))\', $faq_topic);
        $faq_tag = preg_replace(\'~&#x0*([0-9a-f]+);~ei\', \'chr(hexdec("\\\\1"))\', $faq_tag);
            $faqs = new WP_Query(array(
                \'p\'                 => \'\'.$faq_id.\'\',
                \'faq-topic\'         => \'\'.$faq_topic.\'\',
                \'faq-tags\'          => \'\'.$faq_tag.\'\',
                \'post_type\'         =>  \'question\',
                \'posts_per_page\'    =>  \'\'.$limit.\'\',
                \'orderby\'           =>  \'menu_order\',
                \'order\'             =>  \'ASC\'
                ));
            $displayfaq= \'<div class="faq_list">\';
                while ($faqs->have_posts()) : $faqs->the_post();
                $displayfaq .= \'<div class="single_faq">\';
                $displayfaq .= \'<h3 class="faq_question">\'.get_the_title().\'</h3>\';
                $displayfaq .= \'<p class="faq_answer">\'.get_the_content().\'</p>\';
                $displayfaq .= \'</div>\';
                endwhile;
            wp_reset_query();
            $displayfaq .= \'</div>\';
        return $displayfaq;
        }

add_shortcode(\'faq\',\'faq_shortcode\');
在其中一个循环中,有一个帖子使用了一个短代码

function emailbot_ssc($atts, $content = null) {
        extract( shortcode_atts( array(
        \'address\' => \'\',
            ), $atts ) );
        ob_start();
        echo \'<a href="mailto:\'.antispambot($atts[\'address\']).\'" title="email us" target="_blank" rel="nofollow">\'.$atts[\'address\'].\'</a>\';
        $email_ssc = ob_get_clean();
        return $email_ssc;
        }
add_shortcode("email", "emailbot_ssc");
FAQ循环(代码项#1)未分析短代码。它只是原始显示。

1 个回复
最合适的回答,由SO网友:Mark Jaquith 整理而成

get_the_content() 没有the_content 应用于它的过滤器,即do_shortcode() 被钩住了。这些过滤器仅适用于the_content(). 这两个函数不仅仅是彼此的get/echo版本。get_the_content() 是较低级别。

这是API中的一个异常,并且是由于历史原因。例如,get_the_title() 应用the_title 过滤器。

如果你想要全部the_content 已应用筛选器堆栈,请执行以下操作:

apply_filters( \'the_content\', get_the_content() )
如果仅希望应用短代码,请执行以下操作:

do_shortcode( get_the_content() )

结束

相关推荐

Nested Shortcode Detection

如果您熟悉此代码<?php $pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { //shortcode is being used }&#