WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

Как написать правильно фильтр рубрик?

<?
 if ($_GET['post_author'] != 0) { // если передана фильтрация по разделу
	$args['meta_query'][] = array( // пишем условия в meta_query
	'key' => 'author', // название произвольного поля
	'value' => $_POST['author'], // переданное значение произвольного поля
	);

	}

	if ($_GET['category_name'] != 0) { // если передана фильтрация по разделу
		$args['meta_query'][] = array( // пишем условия в meta_query
			'key' => 'category__and', // название произвольного поля
			'value' => $_POST['category__and'], // переданное значение произвольного поля
			'type' => 'text',
			);
	}

   ?>

<div <?php tie_content_column_attr(); ?>>

<form class="filter" action="" method="post"><!-- action пустой, чтобы ссылалось на текущую страницу -->

	<label>Раздел: 
		<select name="post_author"> <!-- Раздел - селектлист -->
			<option value="">Выберите автора</option>
	<?php
	$users = get_users();
	foreach($users as $user)
	{
		echo "<option ".($user->ID==$post_author?"selected ":"")."value=\"".$user->ID."\">".$user->display_name."</option>";
	}

?>
		 </select>

<select name="category_name"> <!-- Раздел - селектлист -->
<option value="">Выберите категорию</option>
<?php
	$categories = get_categories();
	foreach($categories as $category)
	{
		echo "<option ".($category->term_id==$category_name?"selected ":"")."value=\"".$category->term_id."\">".$category->name."</option>";
	}

?>
		 </select>
	</label>

	<button type="submit">применить фильтр</button>
</form>

<?php
$args = array( 'post_type' => 'post' );

$query = new WP_Query( $args );

if ( $query->have_posts() ) :

			// Get the layout template part
			TIELABS_HELPER::get_template_part( 'templates/archives2', '', array(
				'layout'         => tie_get_option( 'blog_display', 'excerpt' ),
				'excerpt_length' => tie_get_option( 'blog_excerpt_length' ),
				'my_query'       => $query
			));

			// Page navigation
			TIELABS_PAGINATION::show( array( 'type' => tie_get_option( 'blog_pagination' ) ) );
else:
			TIELABS_HELPER::get_template_part( 'templates/not-found' );

endif;

?>
</div><!-- .main-content /-->
<?php

я написал вот так, ну что то у меня не фильтрует... (я только учусь)

Заметки к вопросу:
campusboy 28 дней назад

Может я не понял задумку, но вот ты собираешь в начале кода $args. А потом под конец берешь и перезатираешь её на

 $args = array( 'post_type' => 'post' );

Может её надо дополнить, а не перезатереть?

wolf 28 дней назад

наверное, я просто нормального урока по фильтрам не нашел, поэтому не могу понять как обработчик PHP составить для этой формы

<form class="filter" action="" method="post"><!-- action пустой, чтобы ссылалось на текущую страницу -->

	<label>Раздел: 
		<select name="post_author"> <!-- Раздел - селектлист -->
			<option value="">Выберите автора</option>
	<?php
	$users = get_users();
	foreach($users as $user)
	{
		echo "<option ".($user->ID==$post_author?"selected ":"")."value=\"".$user->ID."\">".$user->display_name."</option>";
	}

?>
		 </select>

<select name="category_name"> <!-- Раздел - селектлист -->
<option value="">Выберите категорию</option>
<?php
	$categories = get_categories();
	foreach($categories as $category)
	{
		echo "<option ".($category->term_id==$category_name?"selected ":"")."value=\"".$category->term_id."\">".$category->name."</option>";
	}

?>
		 </select>
	</label>

	<button type="submit">применить фильтр</button>
</form>

сможете помочь составить обработчик?

0
28 дней назад
  • 0

    Пару наводок:
    Во-первых, форме Вы указали метод "POST".
    В обработчике проверяете, существует ли параметр GET и делаете запрос с параметром POST.
    У вас условие не проходит:

    if ($_GET['post_author'] != 0) {
    ...
    if ($_GET['category_name'] != 0) {

    замените на:

    if (isset($_POST['post_author'])) {
    ...
    if (isset($_POST['category_name'])) {

    И код обработчика нужно поместить после:

    $args = array( 'post_type' => 'post' );

    Иначе - массив просто переписывается.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация