2017-04-19 30 views
1

我的情況
目前我正在開發一個插件,用於在Wordpress中重定向href網址。最後,我希望插件的工作方式如下:首先,它需要檢查用戶點擊了哪個href。然後檢查數據庫中是否存在該URL(它被稱爲redirect_oude_url)。如果是這樣,不是更換新網址URL(被稱爲redirect_nieuwe_url通過連接到新的URL,而不是舊的URL我使用的是CPT稱爲redirect向用戶發送。如何在Wordpress中以編程方式重定向URL?

。我做了一個子菜單添加一個新的重定向,並禁用了CPT的add_new功能,具有create_post => do_not_allow的功能。我能夠檢查舊的url是否已經存在,並且基於那個能夠在管理端進行新的重定向或者不可以。

我的問題
我的問題是我如何能夠檢查當頁面/帖子的前端點擊鏈接時,如果它存在於數據庫中,並自動替換舊的u與新的網址?

我的代碼

<?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); 
} 
?> 
+0

您可以使用: wp_redirect($ url); 退出; – dekts

+0

@dekts我如何能夠在每個頁面/帖子前端頁面上實現這一點?需要將這些代碼添加到每個文件中,我可以將其添加到我的插件文件中? – Stan

+0

在@Stan周圍做一些google,並檢查如下內容:https://developer.wordpress.org/reference/functions/wp_redirect/ – dekts

回答

0

我覺得要實現的是在子菜單中添加一個新的重定向。然後在CPT概述中,您可以查看所有重定向的網址。然後,如果您打開頁面/帖子,並且該特定頁面/帖子被添加到重定向CPT,它必須自動重定向到新的url?

如果這是你在找什麼,嘗試這樣的事情:
我建議通過下面的代碼首先獲取當前網址:

<?php $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?> 

然後你可以根據需要檢查current_url等於數據庫中的舊網址。如果這是真的,你可以使用wp_redirect()由@dekts提到的新網址:

<?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; 
} 
?> 

here有關狀態碼的更多信息。
這應該工作,所以請試試看,如果它不工作,回到我身邊。

+0

它像魅力一樣工作。非常感謝! – Stan

相關問題