2013-06-26 7 views
0

Я получаю некоторые действительно странные результаты, пытаясь вытащить все URL-адреса изображений с особым типом сообщений.Wordpress Network wp_get_attachment_url получает только первый URL-адрес в цикле post

Только первый URL-адрес будет вытащен, остальные будут отображаться пустыми. Я проверил идентификатор сообщения, и он имеет значение. Идентификатор эскиза правильно вытягивается. Если я поместил это значение в функцию hardcoded, он вернет правильный URL-адрес, который находится на странице темы. Вот код:

global $post; 
       $type = 'slider'; 
       $args=array(
        'post_type' => $type, 
        'post_status' => 'publish', 
        'posts_per_page' => 5); 

       $slider_posts = null; 
       $slider_posts = new WP_Query($args); 
       while ($slider_posts->have_posts()) { 
        $slider_posts->the_post(); 
        $post_id = $post->ID; 
        $thumbnail_id = intval(get_post_thumbnail_id($post_id)); 

        if (has_post_thumbnail()) { 
         $url = wp_get_attachment_url($thumbnail_id); 
         ?> 

        <div class="slide"> 
         <img class="slider_images" src="<?php echo $url; ?>" width="587" height="330" /> 
         <div> 
          <h4><?php the_title(); ?></h4> 
          <p id="spacer">&nbsp;</p> 
          <p><?php the_excerpt(); ?></p> 
          <p><a href="<?php the_permalink(); ?>">Read More...</a></p> 
         </div> 
        </div> 
        <?php 
        } 
       } 
       wp_reset_query(); 

       ?> 
      </div> 

URL, чтобы увидеть, что происходит здесь: http://template.seniorshomecaregivers.com/

Я использую URL в ползунком.

Как вы можете видеть, он извлекает только первый URL, после чего все они возвращаются пустым.

Заранее за вашу помощь.

+0

Похоже, что существует проблема с wp_get_attachment_url в сетевой установке. Он получает только первый url при вызове в цикле всех сообщений для настраиваемого типа сообщения. –

+0

Также это проблема только при использовании фильтра содержимого. В качестве примера, если вы замените [somevar] в своем контенте на значение из базы данных. Если фильтры содержимого не существуют, все работает нормально. –

ответ

0

Для тех, кто хочет получить решение, этот код сохранит URL-адрес отображаемого изображения в метатеге сообщения, когда пользовательский пост будет добавлен или обновлен. Затем вам нужно только захватить URL из метаданных в цикле по идентификатору сообщения и метатесту. Это устраняет мирид звонков, чтобы получить идентификатор эскиза, а затем URL.

function add_slider_posttype() { 
$labels = array(
    'name'    => _x('Slider', 'post type general name'), 
    'singular_name'  => _x('Slider', 'post type singular name'), 
    'add_new'   => _x('Add New', 'book'), 
    'add_new_item'  => __('Add New Slide'), 
    'edit_item'   => __('Edit Slide'), 
    'new_item'   => __('New Slide'), 
    'all_items'   => __('All Slides'), 
    'view_item'   => __('View Slides'), 
    'search_items'  => __('Search Slides'), 
    'not_found'   => __('No slides found'), 
    'not_found_in_trash' => __('No slides found in the Trash'), 
    'parent_item_colon' => '', 
    'menu_name'   => 'Slider' 
); 

$args = array(
    'labels'  => $labels, 
    'description' => 'Holds our slides and slider specific data', 
    'public'  => true, 
    'menu_position' => 25, 
    'supports'  => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'), 
    'has_archive' => true, 
); 

register_post_type('slider', $args); 

} 
add_action('init', 'add_slider_posttype', 0); 

function save_slider_meta($post_id) { 

if(get_post_type($post_id) == "slider"){ 
    $thumbnail_id = get_post_thumbnail_id($post_id); 
    $url = wp_get_attachment_url($thumbnail_id); 

    if (!empty($url)){ 
     update_post_meta($post_id, 'slider_img_url', $url); 
    } 
} 

} 

add_action('save_post', 'save_slider_meta');