Действие формы перенаправляется на ту же страницу

Я делаю свою собственную тему. В моей теме у меня есть страница, отображающая пользовательский пост с использованием пользовательского запроса. Я добавил форму на эту страницу. Форма содержит 2 комбобокса, которые содержат значения метаданных моего пользовательского сообщения. Я хочу, чтобы, когда пользователь выберет значения из этих списков и нажмите кнопку «Отправить», WordPress снова отобразит ту же страницу и добавит параметр отправки в мой пользовательский запрос (что-то вроде фильтрации таблицы).

Проблема в том, что при нажатии на submit WordPress падает на index.php вместо этого на мою страницу.

Объявление моей формы:

<form action='"<?php echo get_page_link(SHIURIM_PAGE)?> "' method='get'>"; 

Должен ли я положить что-то еще в действие?

Спасибо, продвинуто.

Мой полный код страницы:

 <?php /* Template Name: Shiurim page */ require 'search-form.php'; ?> <?php get_header(); global $THEME_PATH; global $IMAGES_PATH; ?> <link rel="stylesheet" type="text/css" href="<?php _e($THEME_PATH)?>/shiurim.css"> <div id="page-header-pic"> <img src='<?php _e($IMAGES_PATH)?>/contact-header.jpg' alt="header picture" /> </div> <div class="page-title"> <?php wp_title(); ?> </div> <div class="areaBg"> <div class="page-content-full"> <div class="panel"> <div class="panel-title"></div> <div class="panel-content"> <div id="pageContentId"> <?php function getParam($paramName, $defaultValue) { if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (!empty($_GET[$paramName])) { return $_GET[$paramName]; } } else { // it's a post if (!empty($_POST[$paramName])) { return $_POST[$paramName]; } } return $defaultValue; } $pageIndex = getParam('paged', 0); $searchRav = getParam(SEARCH_RAV, 0); $searchSidra = getParam(SEARCH_SIDRA, 0); $searchText = getParam(SEARCH_TEXT, ""); $searchText = trim($searchText); $queryArgs = array ( 'post_type' => array( POST_TYPE_SHIUR ), 'orderby' => 'title', 'order' => 'ASC', 'paged' => $pageIndex ); $paginateSearchArgs = array(); $metaQuery = array(); if ($searchRav != 0) { $metaQuery[] = array( 'key' => POST_TYPE_RAV, 'value' => $searchRav ); $paginateSearchArgs[SEARCH_RAV] = $searchRav; } if ($searchSidra != 0) { $metaQuery[] = array( 'key' => POST_TYPE_SIDRA, 'value' => $searchSidra ); $paginateSearchArgs[SEARCH_SIDRA] = $searchSidra; } if (count($metaQuery) > 0) { $queryArgs['meta_query'] = $metaQuery; } if (! empty($searchText)) { $queryArgs['s'] = $searchText; $paginateSearchArgs[SEARCH_TEXT] = $searchText; } ?> <div id="shiurimSearchPanel"> <?php renderSearchFrom($searchRav, $searchSidra, $searchText); ?> </div> <div> <?php //query_posts($queryArgs); $shiurim_query = new WP_Query( $queryArgs ); global $wp_query; // Put default query object in a temp variable $tmp_query = $wp_query; // Now wipe it out completely $wp_query = null; // Re-populate the global with our custom query $wp_query = $shiurim_query; $big = 999999999; // need an unlikely integer echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'prev_text' => '&lt;&lt;', 'next_text' => '&gt;&gt;' ) ); ?> </div> <?php $is_first = true; if ( $shiurim_query->have_posts() ) : while ( $shiurim_query->have_posts() ) : $shiurim_query->the_post(); ?> <?php if (!$is_first) { ?> <div class='shiurSeperator'></div> <?php } ?> <?php $is_first = false; get_template_part( "content", "shiur-list" ); ?> <?php endwhile; else: ?> <p><?php _e('Nothing is found'); ?></p> <?php endif; // Restore original query object $wp_query = $tmp_query; // Be kind; rewind wp_reset_postdata(); ?> </div> </div> </div> </div> <div class="clear"></div> </div> <?php get_footer(); ?> 

search-form.php (я тоже использую его в index.php).

 <?php /** * Search panel */ function renderSearchFrom($searchRav = array(), $searchSidra = array(), $searchText = "") { $rabanimList = getPostArrayResult(POST_TYPE_RAV); $sdatorList = getPostArrayResult(POST_TYPE_SIDRA); $html = "<div id='search-panel'>"; $html .= " <form action='" . get_page_link(SHIURIM_PAGE). "' method='post'>"; $html .= " By rav"; $html .= " <select name='search_rav'>"; $html .= " <option value='0'>All ravs</option>"; foreach ($rabanimList as $rav) { $isSelected = ' '; if ($rav['id'] == $searchRav) { $isSelected = ' selected '; } $html .= "<option value='" . $rav['id'] . "'" . $isSelected . ">" . $rav['title'] . "</option>"; } $html .= "</select>"; $html .= " By sidra"; $html .= " <select name='search_sidra'>"; $html .= " <option value='0'>All sidras</option>"; foreach ($sdatorList as $sidra) { $isSelected = ' '; if ($sidra['id'] == $searchSidra) { $isSelected = ' selected '; } $html .= "<option value='" . $sidra['id'] . "'" . $isSelected . ">" . $sidra['title'] . "</option>"; } $html .= "</select>"; $html .= " Free text"; $html .= " <input type='text' name='search_text' class='searchFreeText' value='" . $searchText . "'/>"; $html .= " <input type='submit' value='Search' />"; $html .= " </form>"; $html .= "</div>"; echo $html; } ?> 

Solutions Collecting From Web of "Действие формы перенаправляется на ту же страницу"

Если вы оставите действие пустым, форма будет отправлена ​​на ту же страницу.

Так просто сделайте это: <form action='' method='get'>";

Вы можете использовать этот способ, он короче и отлично работает:

 <form action="<?php echo get_bloginfo('home').'/?page_id='.get_the_ID(); ? >" method="get" > 

Я нашел проблему и решение.

Проблема:

С помощью:

 <form action="<?php echo get_page_link(66) ?>" method="get"> 

это не хорошо. В сгенерированном HTML я вижу:

 <form action="http://mySite/?page_id=66" method="get"> 

Но при отправке формы,? Page_id = 66 исчезает. Поэтому WordPress не знает перенаправления запроса на мой шаблон страницы.

Решение:

Действие укажет на домашнюю страницу и добавит скрытое поле, в котором будет храниться страница_ид.

 <form action="<?php echo home_url ?>" method="get"> <input type='hidden' name='page_id' value='66'> 

Удачи.

Другой способ опубликовать форму на той же странице – это использовать переменные php-сервера :

 echo "<form name='myForm' action='http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]."' method='post'>"; 

Использование функции the_permalink () также может завершиться неудачей, потому что, возможно, вы находитесь внутри цикла, а the_permalink () возвращает постоянную ссылку на объект post post, который в настоящее время обрабатывается самим циклом.