Моя ситуация
В настоящее время я работаю над плагином для перенаправления href url в WordPress. В конце концов, я хотел бы, чтобы плагин работал следующим образом: сначала нужно проверить, какой href щелкнул пользователь. Затем проверяет, существует ли этот url в базе данных (он называется redirect_oude_url
). Если это так, то вместо URL-адреса с новым URL-адресом (который называется redirect_nieuwe_url
en, отправляйте пользователя на новый URL-адрес вместо старого URL-адреса.
Я использую CPT, называемый redirect
. Я создал подменю для добавления нового перенаправления и отключил функцию add_new для CPT с возможностью create_post => do_not_allow
. Я могу проверить, существует ли старый url и на основе того, что можно сделать новую переадресацию или нет на стороне администратора.
Мой вопрос
Мой вопрос заключается в том, как я могу проверить, когда ссылка на ссылку на страницы / сообщения, если она существует в базе данных, и автоматически заменить старый url новым URL-адресом?
Мой код
<?php function webor_redirect_display() { ?> <div class="wrap"> <h2>Redirect jouw URL</h2> </div> <form method="POST"> <label>Plaats hieronder zowel de oude als de nieuwe URL en druk op: Sla op.<br></label> <br> <div class="container_url"> <b>Oude URL:</b> <br><input type="text" class="redirect_oude_url" name="redirect_oude_url" id="redirect_oude_url" placeholder="Begin met: https://" size="150"> <br><br> <b>Nieuwe URL:</b> <br><input type="text" class="redirect_nieuwe_url" name="redirect_nieuwe_url" id="redirect_nieuwe_url" placeholder="Begin met: https://" size="150"> <br><br> <input type="submit" name="submit_url" value="Sla op" class="button button-primary button-large"> </div> </form> <?php $redirect_array = array( 'post_type' => 'redirect', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'redirect_oude_url', 'value' => $_POST['redirect_oude_url'], ), array( 'key' => 'redirect_nieuwe_url', ) ) ); $redirect_query = new WP_Query($redirect_array); if ( $redirect_query->have_posts() ) : //the loop while ( $redirect_query->have_posts() ) : $redirect_query->the_post(); $oude_url = get_post_meta(get_the_ID(), 'redirect_oude_url', true); $nieuwe_url = get_post_meta(get_the_ID(), 'redirect_nieuwe_url', true); endwhile; wp_reset_postdata(); else: endif; if (isset ($_POST['submit_url']) ) { //echo '<br> submit clicked'; if (!empty ($_POST['redirect_oude_url']) ) { //echo '<br> filled oude url'; if (!empty ($_POST['redirect_nieuwe_url']) ) { //echo '<br> filled nieuwe url'; $post_url = $_POST['redirect_oude_url']; //echo '<br>' . $post_url; if ($post_url == $oude_url){ echo '<br> Er bestaat al een redirect voor deze oude url'; } else { //echo '<br> niet hetzelfde, maak nieuwe redirect'; //webor_create_redirect(); echo "<strong><h4>Uw redirect is aangemaakt!</h4></strong>"; } } else { echo '<br> U bent de nieuwe URL vergeten'; } } else { echo '<br> Vul zowel de oude als de nieuwe url in!'; } } }//end function add_shortcode( 'redirect_display', 'webor_redirect_display' ); function webor_create_redirect() { // Make a new post $new_redirect = array( 'post_title' => $_POST['redirect_oude_url'] . ' -> ' . $_POST['redirect_nieuwe_url'], 'post_status' => 'publish', 'post_type' => 'redirect', 'meta_input' => array( 'redirect_oude_url' => $_POST['redirect_oude_url'], 'redirect_nieuwe_url' => $_POST['redirect_nieuwe_url'], ) ); wp_insert_post($new_redirect); } ?>
Я думаю, что вы хотите достичь – добавить новую переадресацию в свое подменю. Затем в обзоре CPT вы просматриваете все перенаправленные URL-адреса. А затем, если вы откроете страницу / сообщение и эта конкретная страница / сообщение будет добавлена к перекрестному CPT, она должна автоматически перенаправляться на новый URL-адрес?
Если это то, что вы ищете, попробуйте что-то вроде этого:
Я предлагаю сначала получить текущий url по следующему коду:
<?php $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>
Затем вам нужно будет проверить, соответствует ли current_url старому URL-адресу в базе данных. Если это так, вы можете использовать wp_redirect (), как указано @dekts, на ваш новый URL:
<?php //An array for getting the old url with the value of the current url. $url_array = array( 'post_type' => 'redirect', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'redirect_oude_url', 'value' => $current_url, ), array( 'key' => 'redirect_nieuwe_url', ) ) ); $url_query = new WP_Query($url_array); if ( $url_query->have_posts() ) : while ( $url_query->have_posts() ) : $url_query->the_post(); $get_old_url = get_post_meta(get_the_ID(), 'redirect_oude_url', true); $get_new_url = get_post_meta(get_the_ID(), 'redirect_nieuwe_url', true); endwhile; wp_reset_postdata(); else: endif; //status 302 is default $status = 302; //check if current url is equal to the old url, and then redirect to new url if ($current_url == $get_old_url){ wp_redirect($get_new_url, $status); exit; } ?>
Дополнительную информацию о кодах статуса смотрите здесь .
Это должно работать, поэтому, пожалуйста, попробуйте и вернитесь ко мне, если он не работает.