Посты запросов (после мета)
-
16-10-2019 - |
Вопрос
Моя ситуация: у меня есть передняя страница, которая фильтрует 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 для полного списка доступных вещей.