Вопрос

Моя ситуация: у меня есть передняя страница, которая фильтрует 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;

        ?>                                              

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

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

Большое спасибо. Вся помощь высоко ценится;)

Это было полезно?

Решение 2

Сделаю. Это просто немного сложнее, но здесь идет:

<?php
/**
 * WP Practica
 * Home Page Template
 */

get_header(); ?>
<?php $options = get_option( 'practica_theme_settings' ); ?>
<div id="main"> <!-- start div#main -->

    <!-- Optional 3D style --><div class="dimWrap_content"></div>
    <div id="content" > <!-- start div#content -->

        <?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=-1&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 ( $options['nothumb_content'] == true ) { ?>
            <div id="page-content">
                <?php the_content(); ?>
            </div>
            <?php } else {
            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'; } ?>">
                        <?php if ($custom_meta['pr_openpretty_home'][0] != true) { ?>
                            <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>
                        <?php } else {
                            if ($custom_meta['pr_openpretty_video'][0] == 'Your URL' || $custom_meta['pr_openpretty_video'][0] == '') { ?>
                                <a href="<?php $image_id = get_post_thumbnail_id();
                                        $image_url = wp_get_attachment_image_src($image_id,’large’, true);
                                        echo $image_url[0]; ?>" title="<?php the_title_attribute(); ?>" rel="prettyPhoto<?php 
                                        if(!empty($custom_meta['pr_openpretty_slideshow'][0])) { 
                                            echo '[';
                                            echo $custom_meta['pr_openpretty_slideshow'][0];
                                            echo ']';
                                        } ?>">
                                    <?php
                                        $atts = array(
                                            'class' => "attachment-$size imageBlock",
                                            'alt'   => get_the_title(),
                                        );
                                        the_post_thumbnail('portfolioSmall', $atts); 

                                    ?>
                                </a>
                                <?php } else { ?>
                                <a class="videoBlock" href="<?php echo $custom_meta['pr_openpretty_video'][0]; ?>?width=100%&height=100%" title="<?php the_title_attribute(); ?>" rel="prettyPhoto<?php 
                                        if(!empty($custom_meta['pr_openpretty_slideshow'][0])) { 
                                            echo '[';
                                            echo $custom_meta['pr_openpretty_slideshow'][0];
                                            echo ']';
                                        } ?>">
                                    <?php
                                        $atts = array(
                                            'class' => "attachment-$size imageBlock",
                                            'alt'   => get_the_title(),
                                        );
                                        the_post_thumbnail('portfolioSmall', $atts); 

                                    ?>
                                </a>
                                <?php } ?>
                        <?php } ?>

                        </li>                   
                        <?php
                        $count++;
                        if($count == $page_items) { break; }
                    }
                endwhile; 
                echo '</ul> <!-- First row -->';
                else :          
                echo '<h3>Oops, something went wrong.</h3>';

             endif;
            }
        ?>                                              
    </div> <!-- end div#content -->

<?php get_footer(); ?>

Другие советы

Хорошо, это ваши исходные мета -условия, которые описывают, что вам нужны все сообщения, где ключ с именем от $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 Чтобы сравниться с логической работой, в зависимости от того, что удерживает ваше пользовательское поле.

Видеть Пользовательские параметры поля в Codex для полного списка доступных вещей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top