ob_start()结合wp_query

时间:2016-01-21 12:20:55

标签: wordpress wordpress-plugin

我正在制作我的第一个插件,但显示我的短代码时出现问题。 它一直显示在顶部,但我已经阅读了一些关于ob_start();并尝试使用它,但短代码只返回任何内容。

我使用下面的代码 - 它似乎与我的帖子有关。有谁知道为什么要解决这个问题?

我的WP_Query:

$query = new WP_Query( array(
'category__in' => $categories,
'posts_per_page' => $whpost_stored_meta_shortcode['whpost_number_of_posts'][0]
  ));

我用来显示它的代码:

ob_start();

echo '<div class="whpost_content">';
    while($query->have_posts()) : $query->the_post();
      // Get the URL to the attached image.
      $attached_image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'large' );
      echo '<div class="whpost_post" style="width: ' . $post_width .'; background-image: url(' . $attached_image[0] . ');">';
        the_title();
      echo '</div>';
    endwhile;
  echo '</div>';

  return ob_get_clean();

短代码功能的完整代码:

  <?php
function cpt_content_func( $atts ) {
  // Get the ID we putted in into [wh-postgrid id="THIS_ID"]
  extract( shortcode_atts( array(
    'id' => null
  ), $atts ) );

  // Get stored meta data (For the categories - needed to be formatted in
  // a certain way)
  $categories = get_post_meta( $id, 'whpost_cats', true );

  // Get meta data for settings and such.
  $whpost_stored_meta_shortcode = get_post_meta( $id );

  // Get the correct categories and use the settings we got.
  $query = new WP_Query( array(
    'category__in' => $categories,
    'posts_per_page' => $whpost_stored_meta_shortcode['whpost_number_of_posts'][0]
  ));

  // Set the styles
  switch ( $whpost_stored_meta_shortcode['whpost_posts_per_line'][0] ) {
    case 1:
      $post_width = '100%';
      $post_max_height = '';
      break;

    case 2:
      $post_width = '50%';
      $post_max_height = '';
      break;

    case 3:
      $post_width = '33.333333%';
      $post_max_height = '';
      break;

    case 4:
      $post_width = '25%';
      $post_max_height = '';
      break;

    default:
      $post_width = '50%';
  }



  // Display the front-end
  ob_start();

  echo '<div class="whpost_content">';
    while($query->have_posts()) : $query->the_post();
      // Get the URL to the attached image.
      $attached_image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'large' );
      echo '<div class="whpost_post" style="width: ' . $post_width .'; background-image: url(' . $attached_image[0] . ');">';
        the_title();
      echo '</div>';
    endwhile;
  echo '</div>';

  return ob_get_clean();
}
add_shortcode('wh-postgrid','cpt_content_func');

2 个答案:

答案 0 :(得分:0)

我认为您的查询有问题,您可以添加此行以检查

if (!$query->have_posts()) {

       return 'Empty result';

} else {

       return ob_get_clean();
}

答案 1 :(得分:0)

该函数必须返回输出。

更改您的代码,工作:

$output = '<div class="whpost_content">';
while($query->have_posts()) : $query->the_post();
    // Get the URL to the attached image.
    $postId =  get_the_ID();
    $attached_image = wp_get_attachment_image_src( get_post_thumbnail_id( $postId ), 'large' );
    $output .= '<div class="whpost_post" style="width: ' . $post_width .'; background-image: url(' . $attached_image[0] . ');">';
    $output .= get_the_title( $postId );
    $output .= '</div>';
endwhile;
$output .= '</div>';

return $output;