2011-12-20 65 views
0

我想为客户的WordPress的网站创建更具体的jQuery画廊!需要帮助jQuery的画廊从wordpress附件

的理念是:

  • 我们有页 “画廊” 女巫将使用页面模板 “画廊-TPL”,让我们说!

  • 在页面模板“Gallery-tpl”我有一个头像女巫的大图像是第一篇文章附件的全尺寸!

  • 一些身体在那里我有< DIV>与所有附件

  • TUMBNAIL SIZE的无序列表!

  • 这个名单必须是一个滑块

  • 而且我要当点击缩略图标头中的大图像与点击的缩略图的完整版本的改变

  • 我对这个职位Get Attachments to post如何发现获得第一个附件,以及如何获得所有这些!

    • 我发现了一种用jQuery替换图像的方法。

    • 然后我试图所有代码结合在一起,但它仅适用于一个图像

这里是我的“画廊-TPL”

<?php 
/** 
Template Name: Gallery 

original: http://www.rlmseo.com/blog/get-images-attached-to-post/ 
*/ 

function bdw_get_first_image() { 

    // Get the post ID 
    $iPostID = $post->ID; 

    // Get images for this post 
    $arrImages =& get_children('post_type=attachment&post_mime_type=image&post_parent=' . $iPostID); 

    // If images exist for this page 
    if($arrImages) { 

     // Get array keys representing attached image numbers 
     $arrKeys = array_keys($arrImages); 

     /******BEGIN BUBBLE SORT BY MENU ORDER************/ 
     // Put all image objects into new array with standard numeric keys (new array only needed while we sort the keys) 
     foreach($arrImages as $oImage) { 
      $arrNewImages[] = $oImage; 
     } 

     // Bubble sort image object array by menu_order TODO: Turn this into std "sort-by" function in functions.php 
     for($i = 0; $i < sizeof($arrNewImages) - 1; $i++) { 
      for($j = 0; $j < sizeof($arrNewImages) - 1; $j++) { 
      if((int)$arrNewImages[$j]->menu_order > (int)$arrNewImages[$j + 1]->menu_order) { 
       $oTemp = $arrNewImages[$j]; 
       $arrNewImages[$j] = $arrNewImages[$j + 1]; 
       $arrNewImages[$j + 1] = $oTemp; 
      } 
      } 
     } 

     // Reset arrKeys array 
     $arrKeys = array(); 

     // Replace arrKeys with newly sorted object ids 
     foreach($arrNewImages as $oNewImage) { 
      $arrKeys[] = $oNewImage->ID; 
     } 
     /******END BUBBLE SORT BY MENU ORDER**************/ 

     // Get the first image attachment 
     $iNum = $arrKeys[0]; 

     // Get the thumbnail url for the attachment 
     $sThumbUrl = wp_get_attachment_thumb_url($iNum); 

     // UNCOMMENT THIS IF YOU WANT THE FULL SIZE IMAGE INSTEAD OF THE THUMBNAIL 
     $sImageUrl = wp_get_attachment_url($iNum); 

     // Build the <img> string 
     $sImgString = '<a href="' .$sImageUrl . '" class="btw_fullimage">' . 
         '<img src="' . $sImageUrl . '" width="600" height="200" alt="Big Image" title="Big Image" />' . 
        '</a>'; 

     // Print the image 
     echo $sImgString; 
    } 
} 

function bdw_get_images() { 

    // Get the post ID 
    $iPostID = $post->ID; 

    // Get images for this post 
    $arrImages =& get_children('post_type=attachment&post_mime_type=image&post_parent=' . $iPostID); 

    // If images exist for this page 
    if($arrImages) { 

     // Get array keys representing attached image numbers 
     $arrKeys = array_keys($arrImages); 

     /******BEGIN BUBBLE SORT BY MENU ORDER************/ 
     // Put all image objects into new array with standard numeric keys (new array only needed while we sort the keys) 
     foreach($arrImages as $oImage) { 
      $arrNewImages[] = $oImage; 
     } 

     // Bubble sort image object array by menu_order TODO: Turn this into std "sort-by" function in functions.php 
     for($i = 0; $i < sizeof($arrNewImages) - 1; $i++) { 
      for($j = 0; $j < sizeof($arrNewImages) - 1; $j++) { 
      if((int)$arrNewImages[$j]->menu_order > (int)$arrNewImages[$j + 1]->menu_order) { 
       $oTemp = $arrNewImages[$j]; 
       $arrNewImages[$j] = $arrNewImages[$j + 1]; 
       $arrNewImages[$j + 1] = $oTemp; 
      } 
      } 
     } 

     // Reset arrKeys array 
     $arrKeys = array(); 

     // Replace arrKeys with newly sorted object ids 
     foreach($arrNewImages as $oNewImage) { 
      $arrKeys[] = $oNewImage->ID; 
     } 
     /******END BUBBLE SORT BY MENU ORDER**************/ 
     // izpolzvai do ili for 
     echo '<ul id="btw_gallery">'; 
     for($i = 0; $i < sizeof($arrNewImages) - 1; $i++) { 

      // Get the first image attachment 
      $iNum = $arrKeys[$i]; 

      // Get the thumbnail url for the attachment 
      $sThumbUrl = wp_get_attachment_thumb_url($iNum); 

      // UNCOMMENT THIS IF YOU WANT THE FULL SIZE IMAGE INSTEAD OF THE THUMBNAIL 
      $sImageUrl = wp_get_attachment_url($iNum); 

      // Build the <img> string 
      $sImgString = '<img src="' . $sThumbUrl . '" alt="Thumbnail Image" title="Thumbnail Image" class="btw_thumb" />'; 

      // Print the image 
      echo '<li>'.$sImgString.'</li>'; 
     } 
     echo '</ul>'; 
     echo ' 
     <script> 
     $("#btw_gallery li img").live("click", function() { 
      $("a.btw_fullimage").attr("href", \''.$sImageUrl.'\').attr("title", this.title); 
      $(".btw_fullimage img").attr("src", \''.$sImageUrl.'\').attr("alt", this.alt).attr("title", this.title); 
     }); 
     </script> 
     '; 
    } 
} 

get_header(); ?> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

     <div id="primary"> 
      <div id="content" role="main"> 

       <?php while (have_posts()) : the_post(); ?> 

        <?php bdw_get_first_image(); ?> 

        <?php get_template_part('content', 'page'); ?> 

        <?php bdw_get_images(); ?> 
       <?php endwhile; // end of the loop. ?> 

       <hr /> 



      </div><!-- #content --> 
     </div><!-- #primary --> 


<?php get_footer(); ?> 

我确信还有更多正确和专业的方式来做到这一点,它会工作!

如果有人能帮助我,请回答我!

回答

0

主要问题是您的脚本将JavaScript中的图像网址硬编码到循环中引用的最后一张图像(在您的for循环中设置了$sImageUrl)。如果您不明白我的意思,请查看生成页面的来源。

作为一种常规方法,我将图像交换逻辑工作在一个简单的HTML页面中,然后将其应用到WordPress。

要具体: 我会摆脱泡沫排序。它不会影响你的输出,但它会简化你的代码。根据the codex for get_children,自变量与get_posts相同,后者又使用WP_Query,它具有orderbyorder参数。假设你想让它们以这种方式排序 - 我注意到这个冒泡排序来自你引用的页面。

WordPress附带jQuery副本 - 通过将其放入您的模板中,您可能会不必要地将其包含两次或更糟,包括两个相冲突的版本。请查看the wp_enqueue_script function,并在functions.phpwp_enqueue_scripts行动挂钩中调用它。因为它与WordPress捆绑销售, wp_enqueue_script('jquery'); 应该足够了。另外,如果你想使用Google版本(不是一个坏主意),你可以使用Use Google Libraries插件。

我会检索附件一次,并在两个函数中使用结果。你需要让WordPress做更多的工作(可能运行两个完全相同的数据库查询)。

如果可以的话,我可能还会显示所显示图片的缩略图。它将简化显示逻辑(您不必将旧主图像的缩略图切换到新图像的位置)。

我已经取出了图像上的硬编码宽度和高度(仅用于我的测试)。如果您想动态设置它们,您可以查看the wp_get_attachment_image_src function

我不是jQuery专家(毫无疑问比“onclick”更好的方法,纯粹主义者不会放在HTML中),但下面的代码适用于我。

在functions.php中:

add_action('wp_enqueue_scripts', 'so_enqueue_scripts'); 

function so_enqueue_scripts() { 
    wp_enqueue_script('jquery'); 
} 

,并在你的模板文件:

<?php 
/** 
Template Name: Gallery 

original: http://www.rlmseo.com/blog/get-images-attached-to-post/ 
*/ 

function so_get_attached_images($post_id) { 
    return get_children(array(
     'post_type' => 'attachment', 
     'post_mime_type' => 'image', 
     'post_parent' => $post_id, 
     'orderby' => 'menu_order', 
     'order' => 'ASC' 
    )); 
} 

function so_show_first_image($image) { 
    $sImageUrl = wp_get_attachment_url($image->ID); 
    $sImgString = '<a href="'.$sImageUrl.'" class="btw_fullimage">'.'<img src="'.$sImageUrl.'" alt="Big Image" title="Big Image" />'.'</a>'; 
    echo $sImgString; 
} 


function so_show_thumbnails($images) { 
    if (empty($images)) { 
     return; 
    } 

    echo '<ul id="btw_gallery">'; 

    foreach($images as $image) { 
     $sThumbUrl = wp_get_attachment_thumb_url($image->ID); 
     $sImageUrl = wp_get_attachment_url($image->ID); 

     $sImgString = '<a href="#" onclick="setImage(\''.$sImageUrl.'\'); return false;"><img src="'.$sThumbUrl.'" alt="Thumbnail Image" title="Thumbnail Image" class="btw_thumb"/></a>'; 

     echo '<li>'.$sImgString.'</li>'; 
    } 

    echo '</ul>'; 

} 

get_header(); 
?> 
    <script> 
     function setImage(sImageUrl) { 
      jQuery("a.btw_fullimage").attr("href", sImageUrl).attr("title", this.title); 
      jQuery(".btw_fullimage img").attr("src", sImageUrl).attr("alt", this.alt).attr("title", this.title); 
     } 
    </script> 
    <div id="primary"> 
     <div id="content" role="main"> 
      <?php while (have_posts()) : 
       the_post(); 
       $images = so_get_attached_images($post->ID); 
       if (! empty($images)) { 
        $first_image = current($images); // first image from the array 
        so_show_first_image($first_image); 
       } 
       get_template_part('content', 'page'); 
       so_show_thumbnails($images); 

      endwhile; // end of the loop. ?> 
      <hr /> 
     </div><!-- #content --> 
    </div><!-- #primary --> 
<?php 
get_footer(); 
?>