2014-10-19 2 views
0

Итак, у меня есть два типа изображений с изображением на моем сайте, пейзажной и портретной ориентаций. Все портреты имеют высоту 650 пикселей. Нет тега, категории или любого другого поля, указанного в WordPress, которое различает эти два. Я пытаюсь выяснить способ индивидуального запроса случайного сообщения из каждой ориентации только с помощью php.запрос сообщений whos featured это размер

Вот что у меня есть до сих пор, что неправильно. Я пытаюсь определить высоту для миниатюры каждого сообщения, установить это как переменную, а затем добавить эту переменную к каждому сообщению. Затем запросите сообщение с этим в массиве аргументов запроса. Надеюсь, я на правильном пути.

<?php 

$pposts = get_posts(array('post_type' => 'portfolio')); 
foreach ($pposts as $post) { 
    $url = wp_get_attachment_url(get_post_thumbnail_id($post->ID)); 
    list($width, $height, $type, $attr) = getimagesize($url); 
     if ($height >= 650) { 
     $orientation = 1; // Portrait 
     } 
     else { 
     $orientation = 2; // Landscape 
     }; 

    $post->orientation = $orientation; 
    } 

$arg1 = array('orientation' => 1, 'post_type' => 'portfolio', 'orderby' => 'rand', 'showposts' => 1); // Portrait query 
$arg2 = array('orientation' => 2, 'post_type' => 'portfolio', 'orderby' => 'rand', 'showposts' => 1); // Landscape query 

$query1 = new WP_Query($arg1); 
if ($query1->have_posts() ) { 
    while ($query1->have_posts()) { 
     $query1->the_post(); 
     the_post_thumbnail(); 
    } 
}; 

$query2 = new WP_Query($arg2); 
if ($query2->have_posts() ) { 
    while ($query2->have_posts()) { 
     $query2->the_post(); 
     the_post_thumbnail(); 
    } 
}; 

$query3 = new WP_Query($arg1); 
if ($query3->have_posts() ) { 
    while ($query3->have_posts()) { 
     $query3->the_post(); 
     the_post_thumbnail(); 
    } 
}; 

?> 
+0

В чем Ваш вопрос? – James

+0

Мой вопрос: как это сделать? Как вы запрашиваете сообщение или сообщения в зависимости от высоты их эскиза? Я просто предоставил свой неработающий код для дальнейшего разъяснения и покажу свои усилия. – fromdecay

+0

«Вот что я до сих пор, что неправильно». - Простите, но я немного улыбнулся =) Красивая проницательность! – Rudie

ответ

0

Опубликовать это, потому что это полный рабочий ответ на мой вопрос и то, что я пытался достичь. Хорошо, поэтому я взял код Шиби и добавил идентификатор сообщения в разные массивы. Затем я выбрал случайные ключи из этих массивов для ссылки, вызывая миниатюры сообщений. Конечный результат - это то, что я хотел: 1) случайный портрет, 2) случайный пейзаж, 3) другой случайный портрет.

Если кто-либо видит какие-либо улучшения, которые могут быть сделаны, пожалуйста, дайте мне знать. Я не включил в этот код мои обертки div, поскольку это применимо только в моем случае. Я также ограничил исходный запрос до 100 сообщений, чтобы все ускорилось (можно сделать несколько тестов, чтобы узнать, сколько сообщений оно замедляет).

<?php 
// Parameters as separate arguments 
function get_posts_by_image_size($width, $height, $size = 'full') { 
    global $post; 
    $pposts = get_posts(array('post_type' => 'portfolio', 'numberposts'=> 100)); 
    foreach ($pposts as $post) { 
     $post_thumbnail_id = get_post_thumbnail_id($post->ID); 
     if($post_thumbnail_id) { 
      $image = wp_get_attachment_image_src($post_thumbnail_id, $size); 
      if($image[1] >= $width && $image[2] >= $height) { 
      $portrait[] = get_the_ID(); 
      } 
      elseif($image[1] >= $width && $image[2] <= $height) { 
      $landscape[] = get_the_ID();   
     } 
    } 

} 
$portrait_id = array_rand($portrait, 2); 
$landscape_id = $landscape[rand(1, count($landscape))]; 
echo get_the_post_thumbnail($portrait[$portrait_id[0]]); 
echo get_the_post_thumbnail($landscape_id); 
echo get_the_post_thumbnail($portrait[$portrait_id[1]]); 
} 

get_posts_by_image_size(0, 650); // Run the function whrere you want. 


?> 
0

Вы уже делаете цикл 1 раз на все post_type = 'портфолио'.

Так что вам не нужен секретный запрос. просто создайте функцию для этого что-то вроде этого.

function get_posts_by_image_size($width, $height, $size = 'full') { 
    global $post; 
    $pposts = get_posts(array('post_type' => 'portfolio')); 
    foreach ($pposts as $post) { 
     $post_thumbnail_id = get_post_thumbnail_id($post->ID); 
     if($post_thumbnail_id) { 
      $image = wp_get_attachment_image_src($post_thumbnail_id, $size); 
      if($image[1] >= $width && $image[2] >= $height) { 
       the_title(); // here you print the data 
      } 
     } 
    } 
} 

get_posts_by_image_size(0, 200); // Run the function whrere you want. 
+0

Спасибо большое Шиби! Проводя приведенный ниже код. – fromdecay