@arkanzas75

Как исправить ошибку 404 при переходе на /search.php/page/2/ (wordpress)?

Здравствуйте! На главной есть форма, которая фильтрует посты через POST запрос на search.php. Проблема в том, что на странице результатов поиска не работает пагинация. При переходе на следущую сраницу /search.php/page/2/ получаю 404. Для обычных и кастомных постов все работает нормально. Буду признателен за помощь!

search.php :
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$MY_QUERY = new WP_Query($args);

?>
<?php if ($MY_QUERY->have_posts()) : ?>
	<?php while ($MY_QUERY->have_posts()) : $MY_QUERY->the_post(); ?>
		<div class="catalog">
			<div class="container">
				<div class="catalog-wrapper">
					<div class="catalog-item">
						<img src="<?php the_post_thumbnail_url(); ?>">
						<div class="catalog-item-desc">
							<p class='catalog-item-price'><?php the_field('apartment-price'); ?>$</p>
							<p class='catalog-item-house'>Дом: <span class="recommend-color-text"><?php the_field('apartment-area'); ?>кв.м</span></p>
							<p class='catalog-item-floors'>Этажность: <span class="recommend-color-text"><?php the_field('apartment-floors'); ?>х</span></p>
							<p class='catalog-item-street'>Улица: <span class="recommend-color-text"><?php the_field('apartment-street'); ?></span></p>
							<a class='recommend-item-more-btn' href="<?php echo get_permalink(); ?>">Подробнее</a>
							<a class='recommend-item-tel-btn' href="<?php echo get_permalink(); ?>">Узнать номер</a>
						</div>
					</div>
				<?php endwhile; ?>
			<?php endif; ?>
				</div>
				<div class="page_nav">
					<?php
					$GLOBALS['wp_query']->max_num_pages = $MY_QUERY->max_num_pages;
					the_posts_pagination(array(
						'type' => 'block',
						'screen_reader_text' => (' '),
						'end_size'     => 1,
						'mid_size'     => 1,
						'prev_next'    => True,
						'prev_text'    => ('<i class="fa fa-angle-left"></i>'),
						'next_text'    => ('<i class="fa fa-angle-right"></i>'),
						'add_args'     => False
					));
					?>
				</div>
			</div>
		</div>

		<?php wp_reset_query();	 // Restore global post data stomped by the_post(). 
		?>
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@arkanzas75 Автор вопроса
Вообщем сделал все через index.php.

<?php if( $_GET['type'] ): ?>

    <?php 

    $flat = $_GET['type'];
/* ... Остальные переменные ... */

    $meta_query = array(
        'relation' => 'AND',
        array(
            'key'		=> 'apartment-form-type',
            'value'		=> $flat,
            'compare'	=> '='
        )
    );

/* ... Остальные ключи ... */

    $paged = get_query_var('page') ? get_query_var('page') : 1;
    // args
    $args = array(
        'numberposts' => -1,
        'posts_per_page'=>9,
        'order'   => 'DESC',
        'post_type' => 'apartment',
        'paged' => $paged,
        'meta_query' => $meta_query);

    // query
    $the_query = new WP_Query( $args );

    ?>

<div class="catalog">
            <div class="container">
            <div class="catalog-wrapper">

        <?php if( $the_query->have_posts() ): ?>
                
                <?php while( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <div class="catalog-item">
                            <img src="<?php the_post_thumbnail_url(); ?>">
                            <div class="catalog-item-desc">
                                <p class='catalog-item-price'><?php the_field('apartment-price'); ?>$</p>
                                <p class='catalog-item-house'>Дом: <span class="recommend-color-text"><?php the_field('apartment-area'); ?>кв.м</span></p>
                                <p class='catalog-item-floors'>Этажность: <span class="recommend-color-text"><?php the_field('apartment-floors'); ?>х</span></p>
                                <p class='catalog-item-street'>Улица: <span class="recommend-color-text"><?php the_field('apartment-street'); ?></span></p>
                                <div class='catalog-item-btns'>
                            <a class='catalog-item-more-btn' href="<?php echo get_permalink(); ?>">Подробнее</a>
                            <a class='catalog-item-tel-btn' href="<?php echo get_permalink(); ?>">Узнать номер</a>
                        </div>
                            </div>
                        </div>

                <?php

                endwhile;
            endif;
            
            ?>
            </div>
                        </div>
                        </div>

            <?php wp_reset_query();	 // Restore global post data stomped by the_post(). ?>

<?php endif; ?>

<?php if( empty($_GET['type']) ): ?>

<div class="selector">

            <form action='/' method='get'>
                <div class="select-flat"><select class="selector-big-field" name='type'>
                        <option value="Квартира">Квартира</option>
                        <option value="Дом">Дом</option>
                        <option value="Участок">Участок</option>
                        <option value="Коммерческая недвижимость">Коммерческая недвижимость</option>
                    </select></div>
<!-- ... Остальные инпуты ... -->
            </form>
            </div>
<?php endif; ?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
search.php - это шаблон, а не страница. Вы не можете просто так вызвать его, обратившись по названию

Что касается кода, то его лучше удалить и написать заново, чем разбирать на ошибки. В вашем случае проще всего взять search.php из темы twentynineteen, создать шаблон каталог-айтема и вызвать его функцией get_template_part(), так же как и там

И еще, все что написано на русском, должно быть написано на английском и обернуто функцией __() или _e(). После чего вы сможете перевести эти строки на нужные вам языки плагином Loco Translate или программой Poedit
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы