2015-10-15 4 views
0

ОБНОВЛЕНИЕ: Теперь я знаю, почему это не сработало. Это было потому, что я пытался показать частную почту. Дамм. Бывает с нами. Сожалею. И спасибо за вашу помощь.Почему я получаю только одно сообщение с get_posts в WordPress?

Я пытаюсь перечислить все сообщения с определенным мета-ключом и значением мета, но я не могу получить все сообщения с определенным определенным значением мета. Я получаю только один.

У меня есть цикл Еогеасп и следующий код, чтобы перечислить все мои сообщения, как это:

$args = array( 
     'post_type' => 'produs', 
     'meta_key' => 'sticky_post', 
     'meta_value' => 1 
); 
$posts = get_posts($args); 

  <?php 
 
\t \t \t \t \t \t \t foreach($posts as $post){ ?> 
 
           <div class="product" id="product-<?php echo $post->ID; ?>"> 
 
            <div class="thumb new_product_thumb"> 
 
            <?php 
 

 
             $thumb_args = array('class' => 'product-img', 'alt' => the_title_attribute('echo=0')); 
 

 
             ?> 
 

 
            <a class="product-thumb read-more" style="" href="<?php echo the_permalink(); ?>" title="citește mai departe"> 
 

 
             <?php echo the_post_thumbnail('product-listing', $thumb_args); ?> 
 

 
            </a> 
 
            <?php //if (current_user_can('manage_options')) { 
 
               if (get_field('tva_produs',$post->ID) == '9') echo '<div class="tva_redus"></div>'; 
 
               // var_dump($top_sellers_new); 
 
              //} 
 
            ?> 
 
            </div> 
 
            <h2> 
 

 
             <a class="read-more" style="" href="<?php echo the_permalink(); ?>" title="citește mai departe"> 
 

 
              <?php the_title(); ?> 
 

 
             </a> 
 

 
            </h2> 
 

 
            <div class="product-content"> 
 

 
             Pret: <?php echo get_field('pret_nou', $post->ID); ?> lei 
 

 
            </div> 
 

 
            <a class="read-more more2" href="<?php echo the_permalink(); ?>" title="citește mai departe"><p>Detalii produs</p> <span class="arrow-next">&nbsp;</span></a> 
 

 
            <?php $id = get_the_ID();?> 
 

 
            <form id="adauga_in_cos" action="<?php echo THEME_URL; ?>/product.php?action=add&product=<?php echo $id; ?>" method="post"> 
 

 
             <input type="hidden" name="produs_id" id="produs_id" value="<?php echo $id; ?>" /> 
 

 
             <input type="hidden" name="produs_price" id="produs_price" value="<?php echo get_field('pret_nou', $id) ?>" /> 
 

 
             <input type="hidden" name="produs_name" id="produs_name" value="<?php echo $post->post_title; ?>" /> 
 

 
             <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="add_to_sc" id="add-<?php echo $id; ?>"></a> 
 

 
            <!-- <input id="adauga_but" class="add_to_sc" type="submit" value="Adauga in cos" />--> 
 

 
            </form> 
 

 
            <div class="horizontal"></div> 
 

 
           </div> 
 

 
         <?php } ?>

Почему я получаю только один пост с meta_value 1, а все с meta_value 1?

+0

@lonut может у предоставить полный код с петли Еогеасп –

+0

@Weblineindia, это своего рода много кода в foreach. Главное, даже когда я делаю var_dump ($ posts), я получаю массив из 1 элемента. – Ionut

+0

Я также обновил код с помощью цикла foreach. – Ionut

ответ

0

Три вопроса здесь

  • Не злоупотреблять $posts глобальным, вы используете его в качестве пользовательской переменной, так что вы нарушаете глобальный. Используйте имя настраиваемой переменной, например `$ posts_array.

  • Если вы собираетесь использовать $post, (который следует использовать для установки postadat), вы должны сбросить его обратно к исходному значению

  • Установите posts_per_page в -1, чтобы получить все сообщения с желаемыми настраиваемое поле

Ваш код должен выглядеть следующим образом: (Непроверено)

$args = array( 
    'post_type' => 'produs', 
    'meta_key' => 'sticky_post', 
    'meta_value' => 1, 
    'posts_per_page' => -1 
); 
$posts_array = get_posts($args); 

foreach ($posts_array as $post) { 
    setup_postdata($post); 

    // All your other code 

} 
wp_reset_postdata(); 

Если это не работает, вы должны убедиться, что у вас нет плохой экземпляр pre_get_posts действия

+0

Это не работает. – Ionut

+0

Там есть плохой фильтр –

0

вы пробовали добавлять

'numberposts'  => -1, 

Это должно сделать get_post получить все сообщения доступны, если это не работает, мы не можем Вам помочь, если Вы не предоставите больше кода

+0

Я уже пробовал это. Не работает. Обновлен вопрос с помощью цикла foreach. – Ionut

0

Попробуйте это, Вы можете использовать posts_per_page аргумента, и установить его -1

$args = array('post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' =>'any', 'post_parent' => $post->ID); 
$attachments = get_posts($args); 
+0

Вы посмотрели мои $ args выше. Ваш ответ не помогает. Спасибо, в любом случае. – Ionut

+0

Это был просто пример, который я привел выше. Вам придется потратить свое время на модификацию в соответствии с вашими требованиями. Посмотрите на приведенный выше ответ. Я упомянул дополнительно использовать аргумент posts_per_page, кроме того, ваши аргументы по умолчанию могут быть там. –

+0

Я тоже пытался использовать posts_per_page -1. – Ionut

0

'meta_value' - Обратите внимание, что 'meta_key = имя_раздел' также должно быть присутствовать в запросе. Также обратите внимание, что сортировка будет в алфавитном порядке, что отлично подходит для строк (т.е. слов), но может быть неожиданным для чисел (например, 1, 3, 34, 4, 56, 6 и т. Д., А не 1, 3, 4, 6, 34, 56, как вы, естественно, можете ожидать).

$args = array( 
     'post_type' => 'produs', 
     'meta_key' => 'sticky_post', 
     'meta_value' => 1, 
     'posts_per_page' => -1 
); 
$myposts = get_posts($args); 

foreach ($myposts as $post) : setup_postdata($post); ?> 
     <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 
<?php endforeach; wp_reset_postdata(); ?> 
+0

То же самое происходит. Возвращает только одно сообщение. – Ionut

+0

Мой ответ сейчас обновить пожалуйста, попробуйте @Ionut –

+0

Мой ответ сейчас обновить пожалуйста, попробуйте @Ionut –

0

Пожалуйста, попробуйте использовать WP_Query вместо get_posts

Если вам нужно только массив сообщений, и не нуждается в объекте запроса -use get_posts(). В противном случае, если вам нужен доступ к методам объектов запроса или к папкам или клейким сообщениям вверху, вы должны использовать WP_Query.

Обычно (по умолчанию с объектом WP_Query) - WordPress запрашивает, сколько сообщений есть в общей сложности - даже если вы только после первого 10. Это делает так, что он может выполнять разбиение на страницы. Поэтому get_posts() на самом деле (немного) быстрее (он также игнорирует липкие сообщения).

+0

WP_Query возвращает все сообщения вместо учета $ args. Также я не использую липкие сообщения. Я сделал свои собственные липкие сообщения с ACF. У меня есть два переключателя, которые делают мои сообщения «липкими». – Ionut

+0

Он также может искать пользовательские поля, поэтому тот же запрос будет работать и для wp_query – June

+0

Вам повезло? – June

Смежные вопросы