crzr
  • 0
Новичок

Запрос сообщений (метапост)

  • 0

моя ситуация: у меня есть главная страница, которая фильтрует 12 миниатюр из 24 (каждая миниатюра представляет собой избранное изображение сообщения) и отображает их. У пользователя есть возможность скрыть любую публикацию, которую он хочет, с главной страницы.

Допустим, пользователь решил скрыть большой палец № 4, это означает, что теперь у нас есть большой палец 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12. То есть у нас есть 11 миниатюр. Таким образом, нам не хватает последнего «места для миниатюр», которое должно быть заполнено предстоящим постом; в данном случае большой палец № 13.

Короче говоря, главная страница должна запрашивать сообщения, чтобы, когда одна или несколько миниатюр скрыты, что приводит к одному или нескольким пустым местам, она автоматически «заполняла» пустые места, вставляя следующие миниатюры.

Моя главная страница имеет этот запрос:

            <?php 
            global $wp_query;

            // First row of images
            if(!empty($options['home_thumbs'])) {
                $page_items = $options['home_thumbs'];
            } else {
                $page_items = 18;
            }

            $portCat = get_category_id($options['portfoliocat']);

            // get the desired sort order of portfolio items
            if($options['homepage_sort'] == 'DESC') { $order = 'DESC'; } else { $order = 'ASC'; }

            $hideFromHome = get_post_meta($wp_query->post->ID, 'pr_hidehome', true);

            query_posts('posts_per_page=' . $page_items . '&orderby=title&order=' . $order . '&cat=' . $portCat . '&meta_key=' . $hideFromHome .'&meta_value=' . true);
            // arrays to detect first and last columns
            $firsts = array(6,12,18,24,30,36);
            $lasts = array(5,11,17,23,29,35);
            if (have_posts()) :
                $count = 0;
                echo '<ul class="imageRows rowOne">';
                while (have_posts()) : the_post();
                $custom_meta = get_post_custom($post->ID);

                    if (has_post_thumbnail() && $custom_meta['pr_hidehome'][0] != true) { ?>
                        <li class="<?php if (in_array($count, $firsts) ) { echo ' columnFirst'; } if (in_array($count, $lasts) ) { echo ' columnLast'; } ?>">
                            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                                <?php
                                    $atts = array(
                                        'class' => "attachment-$size imageBlock",
                                        'alt'   => get_the_title(),
                                    );
                                    the_post_thumbnail('portfolioSmall', $atts); 

                                ?>
                            </a>
                        </li>                   
                        <?php
                        $count++;
                    }
                endwhile; 
                echo '</ul> <!-- First row -->';
                else :          
                echo '<h3>Oops, something went wrong.</h3>';
             endif;

        ?>                                              

pr_hidehome — это параметр, который при включении скрывает соответствующий пост (но оставляет пустое место, которое мне нужно заполнить одной или несколькими предстоящими миниатюрами). Вы также можете увидеть, как я пытаюсь запрашивать сообщения. Однако в этой статье я прочитал, что лучший способ запрашивать сообщения с помощью настраиваемых полей — использовать массив с «meta_query» в нем. Итак, вот что я пробовал:

            <?php 
            global $wp_query;

            // First row of images
            if(!empty($options['home_thumbs'])) {
                $page_items = $options['home_thumbs'];
            } else {
                $page_items = 18;
            }

            $portCat = get_category_id($options['portfoliocat']);

            // get the desired sort order of portfolio items
            if($options['homepage_sort'] == 'DESC') { $order = 'DESC'; } else { $order = 'ASC'; }


            $args = array(
            'posts_per_page' => $page_items,
            'orderby' => 'title',
            'order' => $order,
            'cat' => $portCat,
            'meta_query' => array(
                    array(
                        'key' => 'pr_hidehome',
                        'value' => 'the_value_you_want',
                        'compare' => 'LIKE'
                    )
                )
            );
            query_posts($args);

            // arrays to detect first and last columns
            $firsts = array(6,12,18,24,30,36);
            $lasts = array(5,11,17,23,29,35);
            if (have_posts()) :
                $count = 0;
                echo '<ul class="imageRows rowOne">';
                while (have_posts()) : the_post();
                $custom_meta = get_post_custom($post->ID);

                    if (has_post_thumbnail() && $custom_meta['pr_hidehome'][0] != true) { ?>
                        <li class="<?php if (in_array($count, $firsts) ) { echo ' columnFirst'; } if (in_array($count, $lasts) ) { echo ' columnLast'; } ?>">
                            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                                <?php
                                    $atts = array(
                                        'class' => "attachment-$size imageBlock",
                                        'alt'   => get_the_title(),
                                    );
                                    the_post_thumbnail('portfolioSmall', $atts); 

                                ?>
                            </a>
                        </li>                   
                        <?php
                        $count++;
                    }
                endwhile; 
                echo '</ul> <!-- First row -->';
                else :          
                echo '<h3>Oops, something went wrong.</h3>';
             endif;

        ?>                                              

К сожалению, это дало мне резервную ошибку «Ой, что-то пошло не так».

Вот и все. Надеюсь, я объяснил себя достаточно хорошо. Если нет, я постараюсь все перефразировать, чтобы вы могли мне помочь!

Спасибо большое. Вся помощь приветствуется 😉

Share
  1. Хорошо, это ваши исходные мета-условия, которые описывают, что вам нужны все сообщения, в которых ключ с именем из $hideFromHome числа равен ( meta_compare по = умолчанию) true (на самом деле 1, поскольку вы объединяете логическое значение со строкой).

    '&meta_key=' . $hideFromHome .'&meta_value=' . true
    

    То, что вы получили во втором фрагменте, определяет имя ключа как pr_hidehome, значение как строку the_value_you_want и явное сравнение как LIKE (что является термином SQL и действует как несколько хитрая версия поиска строки):

    'meta_query' => array(
                        array(
                            'key' => 'pr_hidehome',
                            'value' => 'the_value_you_want',
                            'compare' => 'LIKE'
                        )
                    )
    

    Чтобы выразить исходные условия с более новым синтаксисом, это будет примерно так:

    'meta_query' => array(
                            array(
                                'key' => $hideFromHome,
                                'value' => true,
                            )
                        )
    

    Опять же, = подразумевается по умолчанию, но вам также может понадобиться type провести сравнение с булевой операцией, в зависимости от того, что содержит ваше пользовательское поле.

    Полный список доступных материалов см. в разделе Параметры настраиваемых полей в Кодексе.

    • 0

Оставить ответ

You must login to add an answer.