2016-10-11 16 views
0

あなたが決定した投稿を表示するウィジェットを作成し、img(そのdoesntの仕事)を表示し、タイトル、抜粋、およびリンクがうまくいきます。get_the_post_thumbnail Wordpressが動作しません

$ post-> IDが正常に動作しています。 "add_theme_support( 'post-thumbnails');"が追加されました。 WPバージョンが最後のバージョンです。

echo '<a href="' . get_permalink($post->ID) . '" title="' . apply_filters('widget_title', $post->post_title). '">'; 
    echo get_the_post_thumbnail($post->ID, 'full'); 
    echo '</a>'; 

私はウィジェットを実行すると、私は絵を見カント、これはHTMLです:

<div class="latest_news-image"><a href="http://localhost/whatever/springs-is-in-the-headline/" title="Springs is in the headline"><img src="" alt="Home" class="thumbnail"></a></div> 

これは、ウィジェットコードです:

if (!defined('ABSPATH')) 
die('-1'); 


add_action('widgets_init', function(){ 
    register_widget('Latest_News_Widget'); 
}); 

/** 
* Adds Latest News Widget. 

*/ 
class Latest_News_Widget extends WP_Widget { 

/** 
* Register widget with WordPress. 
*/ 
function __construct() { 
    parent::__construct(
     'Latest_News_Widget', // Base ID 
     __('Latest News Widget', 'text_domain'), // Name 
     array('description' => __('Latest News Widget!', 'text_domain'),) // Args 
    ); 
} 

/** 
* Front-end display of widget. 
* 
* @see WP_Widget::widget() 
* 
* @param array $args  Widget arguments. 
* @param array $instance Saved values from database. 
*/ 
public function widget($args, $instance) { 

    // get the excerpt of the required story 
    if ($instance['story_id'] == 0) { 

     $gp_args = array(
      'posts_per_page' => -1, 
      'post_type' => 'post', 
      'orderby' => 'post_date', 
      'order' => 'desc', 
      'post_status' => 'publish' 
     ); 

     $posts = get_posts($gp_args); 

     if ($posts) { 
      $post = $post[0]; 
     } else { 
      $post = null; 
     } 

    } else { 

     $post = get_post($instance['story_id']); 

    } 

    if (array_key_exists('before_widget', $args)) echo $args['before_widget']; 

    if ($post) { 

     if (has_post_thumbnail($post->ID)) {   
    echo '<div class="latest_news-image">'; 
    echo '<a href="' . get_permalink($post->ID) . '" title="' . apply_filters('widget_title', $post->post_title). '">'; 
    echo get_the_post_thumbnail($post->ID, 'full'); 
    echo '</a>'; 
    echo '</div>'; 
    } 

    echo '<div class="latest_news-text">'; 
     echo '<h3 class="story_widget_title">' . apply_filters('widget_title', $post->post_title). '</h3>'; 
     echo '<p class="story_widget_excerpt">' . $post->post_excerpt . '</p>'; 
     echo '<a href="' . get_permalink($post->ID) . '" class="story_widget_readmore" title="Read the post, ' . $post->post_title . '">READ MORE</a>'; 
     echo '</div>'; 

    } else { 

     echo __('No recent post found.', 'text_domain'); 
    } 

    if (array_key_exists('after_widget', $args)) echo $args['after_widget']; 
} 

/** 
* Back-end widget form. 
* 
* @see WP_Widget::form() 
* 
* @param array $instance Previously saved values from database. 
*/ 
public function form($instance) { 

    if (isset($instance[ 'story_id' ])) { 
     $story_id = $instance[ 'story_id' ]; 
    } 
    else { 
     $story_id = 0; 
    } 
    ?> 

    <p> 
     <label for="<?php echo $this->get_field_id('story_id'); ?>"><?php _e('Story:'); ?></label> 

     <select id="<?php echo $this->get_field_id('story_id'); ?>" name="<?php echo $this->get_field_name('story_id'); ?>"> 
      <option value="0">Most recent</option> 
    <?php 
    // get the exceprt of the most recent story 
    $gp_args = array(
     'posts_per_page' => -1, 
     'post_type' => 'post', 
     'orderby' => 'post_date', 
     'order' => 'desc', 
     'post_status' => 'publish' 
    ); 

    $posts = get_posts($gp_args); 

     foreach($posts as $post) { 

      $selected = ($post->ID == $story_id) ? 'selected' : ''; 

      if (strlen($post->post_title) > 30) { 
       $title = substr($post->post_title, 0, 27) . '...'; 
      } else { 
       $title = $post->post_title; 
      } 

      echo '<option value="' . $post->ID . '" ' . $selected . '>' . $title . '</option>'; 

     } 

    ?> 
     </select> 
    </p> 
    <?php 
} 

/** 
* Sanitize widget form values as they are saved. 
* 
* @see WP_Widget::update() 
* 
* @param array $new_instance Values just sent to be saved. 
* @param array $old_instance Previously saved values from database. 
* 
* @return array Updated safe values to be saved. 
*/ 
public function update($new_instance, $old_instance) { 

    $instance = array(); 
    $instance['story_id'] = (! empty($new_instance['story_id'])) ? strip_tags($new_instance['story_id']) : ''; 
    return $instance; 
} 

} // class Latest News Widget 

編集1:

$image_id = get_post_thumbnail_id($post->ID); 
    echo $image_id; 
    echo the_post_thumbnail($image_id, 'full'); 

数字(79)は表示されますが空です! :(

編集2:

は、それは私がそれをしなければならない "手動"

$thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'full'); 
    echo '<img src="'.$thumbnail_src[0].'" alt="' . apply_filters('widget_title', $post->post_title). '" height="200" width="200">'; 

しかし、私はこの方法のようにいけない作品にするには

+0

https://developer.wordpress.org/reference/functions/get_the_post_thumbnail/ –

+0

あなたのコードは動作するはずです。投稿画像の設定を解除し、新しい画像を設定してください。多分それは奇妙なバグです... –

答えて

0

をコード以下

で試してみてください。
`$thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), "size");` 

if ($thumbnail_src) : ?> 
    <img src="<?php echo $thumbnail_src[0]; ?>" width="<?php echo $thumbnail_src[1]; ?>" height="<?php echo $thumbnail_src[2]; ?>" /> 
<?php endif; ?> 

ループ内でサムネイルを取得しようとしているのは、ホームページ、カテゴリページなどです長期のページ。 the_post_thumbnail();を使用する必要があります。

単一ページのような特定のページに表示するには、get_post_thumbnail_id($ postId)を使用する必要があります。また

あなたはそれ以外の場合は、あなたはWordPressテンプレートタグ機能のためのPOSTデータが動作するように設定する必要があり

+0

あなたは一見を見ることができますか? –

+0

@adrianVazquez私はそれが間違いなく動作する答えを更新しました –

+0

私はこのコードを入れて、これは、HTML取得です。 Array

0

空白が返されます画像を追加したことを確認してください。 global $post;

setup_postdata($post);のいずれかを使用し、完了した後:wp_reset_postdata();を使用して、元のポストまたはページにリセットします。

ウィジェットコードにWordPressループがなく、グローバルポストオブジェクトのみを使用しようとしています。あなたのウィジェットコードで

例、あなたのif($post){...}一部でこれを置き換える:

if ($post) { 

    // Setup the $post so you can use template functions like: the_permalink(); etc... 
    setup_postdata($post); 

    if (has_post_thumbnail()) {   
    echo '<div class="latest_news-image">'; 
    echo '<a href="' . get_permalink() . '" title="' . apply_filters('widget_title', get_the_title()). '">'; 
    echo get_the_post_thumbnail(get_the_ID(), 'full'); 
    echo '</a>'; 
    echo '</div>'; 
    } 

    echo '<div class="latest_news-text">'; 
    echo '<h3 class="story_widget_title">' . apply_filters('widget_title', get_the_title()). '</h3>'; 
    echo '<p class="story_widget_excerpt">' . get_the_excerpt() . '</p>'; 
    echo '<a href="' . get_permalink() . '" class="story_widget_readmore" title="Read the post, ' . get_the_title() . '">READ MORE</a>'; 
    echo '</div>'; 


    // Reset the postdata so we avoid conflicts 
    wp_reset_postdata(); 
} 

関連リンクを()関数setup_postdata()とwp_reset_postdataについての詳細を学ぶために:

あなたの問題がある場合:

  • ポストのサムネイルが実際にあること。
  • 画像のパスを確認してください。ブラウザに直接読み込むことはできますか?
  • 他の画像をサムネイルとしてテスト
  • 画像ファイル名にマルチバイト文字を使用しないようにしました。
関連する問題