Wordpress PHP短代码,get_the_content by id won't显示自定义的帖子类型内容


Wordpress PHP shortcode, get_the_content by id won't display custom post type content

目前在一个项目中,我想通过短代码显示员工的名片,例如[person id="1"]或[person name="bob"]]。

我为员工创建了一个单独的帖子类型,其中title=name, content=contact info和thumbnail=image。

问题是标题和缩略图显示了正确的员工数据,但get_the_content($post_id)显示了我的第一篇文章的内容"Welcome to…!"这是你的第一个帖子…"。

function display_person($atts, $content){
    extract(shortcode_atts(array(
        'posts_per_page' => '1',
        'post_type' => 'person',
        'post_id' => null,
        'caller_get_posts' => 1)
   , $atts));
  global $post;
  $posts = new WP_Query($atts);
  $output = '';
    if ($posts->have_posts())
        while ($posts->have_posts()):
            $posts->the_post();
            $out = '<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
    <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 person-container margin-top">
    <div class="col-lg-6 col-md-6 col-sm-6 hidden-xs person-thumbnail no-padding">
            '.get_the_post_thumbnail($post_id, 'thumbnail-person').'
        </div>
        <div class="hidden-lg hidden-md hidden-sm col-xs-4 person-thumbnail no-padding">
            '.get_the_post_thumbnail($post_id, 'thumbnail-person-small').'
        </div>
        <div class="col-lg-6 col-md-6 col-sm-6 col-xs-8 person no-padding">
            <h3>'.get_the_title($post_id).'</h3>
            '.get_the_content($post_id).'
        </div>
    </div>
</div>';
            $out .='</div>';
    endwhile;
  else
    return;
  wp_reset_query();
  return html_entity_decode($out);
}
add_shortcode('person', 'display_person');

如何让get_the_content($post_id)显示自定义帖子内容?

你的代码好像有点问题。

// this is your shortcode
extract(shortcode_atts(array(
    'posts_per_page' => '1',
    'post_type' => 'person',
    'post_id' => null,
    'caller_get_posts' => 1)
, $atts));

它看起来应该是这样的(基于假设,$ ats的元素是从短代码参数中获取的):

// you extract the parameters into variable names
extract(shortcode_atts(array(
    'posts_per_page'   => 'posts_per_page_var',
    'post_type'        => 'post_type_var',
    'post_id'          => 'post_id_var',
    'caller_get_posts' => 'caller_get_posts_var')
, $atts));
// creating the array of arguments for the query
$new_atts = array(
    'posts_per_page'   => $posts_per_page_var,
    'post_type'        => $post_type_var,
    'post_id'          => $post_id_var,
    'caller_get_posts' => $caller_get_posts_var
);
$posts = new WP_Query($new_atts);
// and go on with your code...

我想这应该能解决你的问题。

长教程:http://www.webdesignerdepot.com/2013/06/how-to-create-your-own-wordpress-shortcodes/

首先:get_the_content()不接受Post-ID作为参数

如果您的短代码仅用于一个人,您可以这样做:

function display_person( $atts ) {
    $atts = shortcode_atts( array(
        'id' => false,
        'name' => false
    ), $atts, 'person' );

    if ( $atts['id'] ) {
        $person = get_post( $atts['id'] );
    } else if ( $atts['name'] ) {
        // todo
    }
    $image = get_the_post_thumbnail( $person->ID, 'medium' );
    $name = $person->post_title;
    $content = wpautop( $person->post_content );
    $output = ""; // todo

    return $output;
}
add_shortcode( 'person', 'display_person' );