从Wordpress的页面显示随机选择的图像?

时间:2017-09-11 16:05:22

标签: php wordpress image post random

我想在我的页面上一次显示一个图像,这是从本页面加载的图像中随机选取的(来自wordpress admin)。

我正在处理我自己的主题,并且我有一个“front-page.php”文件,我可以在其中加载我的页面内容。

我不知道如何将随机图像功能添加到此代码中。

我的PHP代码:

<?php get_header(); ?>	

<div class="container">

<?php
if ( have_posts() ) {
  while ( have_posts() ) {
    the_post(); 
    $images = [];
    $args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID ); 
    $attachments = get_posts($args);
    if ($attachments) {
      foreach ( $attachments as $attachment ) {
        $image_url = ( !empty( wp_get_attachment_url( $attachment->ID ) ) ) ? wp_get_attachment_url( $attachment->ID ) : '';
        $image_alt = ( !empty( get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true) ) ) ? get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true) : '';
        $images[] = array( 
          'url' => $image_url,
          'alt' => $image_alt
        );
      }
    }
    $image = $images[array_rand( $images, 1 )];
    ?>

    <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />

    <?php
  }
}
?>
</div>		

1 个答案:

答案 0 :(得分:1)

创建一个可用图像数组,然后随机选择一个。

$images = array(
    'http://via.placeholder.com/350x150',
    'http://via.placeholder.com/350x150',
    'http://via.placeholder.com/350x150',
    'http://via.placeholder.com/350x150',
);
$image_url = $images[array_rand( $images, 1 )];
echo $image_url;

如果要包含替代文字,请使用多维数组:

$images = array(
    array( 'url' => 'http://via.placeholder.com/350x150', 'alt' => 'My image'),
    array( 'url' => 'http://via.placeholder.com/350x150', 'alt' => 'My image'),
    array( 'url' => 'http://via.placeholder.com/350x150', 'alt' => 'My image'),
    array( 'url' => 'http://via.placeholder.com/350x150', 'alt' => 'My image'),
);
$image = $images[array_rand( $images, 1 )];
echo $image['url'];
echo $image['alt']; 

根据您的回复,您可能会尝试从帖子内容中提取图片,如果是这样,您需要在帖子的附件中循环以创建图片数组。但是,这种方法存在许多潜在的缺陷。如果我是你,我会使用高级自定义字段创建一个图库字段,并将其用作图像组的来源。

<?php
if ( have_posts() ) {
  $images = [];
  while ( have_posts() ) {
    the_post(); 
    $args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID ); 
    $attachments = get_posts($args);
    if ($attachments) {
      foreach ( $attachments as $attachment ) {
        // get url from Plugin: WP Gallery Custom Links
        $image_href = ( !empty( get_post_meta( $attachment->ID, '_gallery_link_url', true) ) ) ? get_post_meta( $attachment->ID, '_gallery_link_url', true) :  '';
        // get attachment
        $image_url = ( !empty( wp_get_attachment_url( $attachment->ID ) ) ) ? wp_get_attachment_url( $attachment->ID ) : '';
        $image_alt = ( !empty( get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true) ) ) ? get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true) : '';
        $images[] = array( 
          'url' => $image_url,
          'alt' => $image_alt,
          'href' => $image_href // url from WP Gallery Custom Links
        );
      }
    }
  }
  $image = $images[array_rand( $images, 1 )];
  ?>
    <a href="<?php echo $image['href']; ?>" title="<?php echo $image['alt']; ?>">
      <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
    </a>

    <?php
}
?>