在wp编辑器中显示帖子的快捷码

时间:2017-08-11 作者:siberian

需要为其他页面上的显示帖子创建快捷码。短代码需要添加到wp编辑器中。

我为另一个页面上的显示帖子创建了以下代码:

<div class="owl-carousel-wrap jobs-carousel">
    <div id="jobsCarousel" class="owl-carousel ">
        <?php
        $args = array(
            \'post_type\' => array(\'job\')
        );
        $the_query = new WP_Query( $args );
        ?>
        <?php global $post; ?>
        <?php if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <?php if ( 683 !== $post->ID ) { ?>
                <a href="<?php the_permalink(); ?>" class="jobs">
            <?php } ?>
            <div class="jobs-item">
                <h2 class="page-head_sub-title"><?php the_title(); ?></h2>
                <p><?php the_content(); ?></p>
            </div>
            <?php if ( 683 !== $post->ID ) { ?>
                </a>
            <?php } ?>
        <?php endwhile;  endif; ?>
    </div>

    <div class="js-control-jobs">
        <div class="carousel-control-prev"><span class="icon-arrow"><!--icon--></span></div>
        <div class="carousel-control-next"><span class="icon-arrow"><!--icon--></span></div>
    </div>
</div>
它在php模板中按预期工作。但是如何在shortcode函数中添加此代码以供使用[jobs] ?

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

声明短代码与使用以下代码一样简单:

add_shortcode(\'jobs\', \'callback_function\');
function callback_function(){ 
    $content = \'\';
    $args = array(
        \'post_type\' => array(\'job\'),
        \'posts_per_page\' => 20
    );
    $the_query = new WP_Query( $args );
    if ($the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            if ( 683 !== get_the_ID() ) { 
                $content .= \'<a href="\'. get_the_permalink().\'" class="jobs">\';
            }
            $content .= \'
                <div class="jobs-item">
                    <h2 class="page-head_sub-title">\'.get_the_title().\'</h2>
                    <p>\'. get_the_content() .\'</p>
                </div>\';
            if ( 683 !== get_the_ID() ) {
                $content .= \'</a>\';
            } 
        }
    }
    wp_reset_postdata();
    return \'
    <div class="owl-carousel-wrap jobs-carousel">
        <div id="jobsCarousel" class="owl-carousel ">
            \'.$content.\'
        </div>

        <div class="js-control-jobs">
            <div class="carousel-control-prev"><span class="icon-arrow"><!--icon--></span></div>
            <div class="carousel-control-next"><span class="icon-arrow"><!--icon--></span></div>
        </div>
    </div>\';

}
将代码包装在函数中,并替换callback_function 函数的名称。然后您可以在编辑器中使用它作为[shortcode-name].

但是,您应该注意,您不能使用echo 在短代码函数中。您应该将内容存储在变量中,然后return 变量。

这意味着您不能使用回显内容的函数,例如the_content()the_title(). 您应该使用get_the_content()get_the_title() 相反

Note: 我没有使用的原因apply_filters(\'the_content\', get_the_contnet()); 如果在帖子中使用此短代码,然后帖子包含在此循环中,则此循环将是无限的,因为过滤器将再次运行短代码,该短代码将运行嵌套的短代码,依此类推。

结束

相关推荐

尝试将动态内容调用为ShortCode属性

我正在尝试向现有(第三方)短代码添加动态属性。短代码在同一页上出现多次。当我这样做时(在functions.php中),我可以得到第一个正确输出的短代码,但其他的则不行。function testOne(){ return do_shortcode(\'[abc type=\"contact\" orderby=\"menu_order\" order=\"asc\" style=\"list-post\" logic=\"and\" abc_tax_student=\"student1\