我解決了它。然而,我不確定問題是什麼。就像我提到的,我在插件中工作。這是應該重定向的代碼。
// This is in the plugin's Initialize function.
add_action('template_redirect', 'wc_custom_redirect_after_purchase');
function wc_custom_redirect_after_purchase() {
global $wp, $wpdb;
$PageID = $wpdb->get_var('SELECT ID FROM '.$table_prefix.'posts WHERE post_content LIKE "%[myshortcode]%" AND post_parent = 0');
if (is_checkout() && ! empty($wp->query_vars['order-received'])) {
$order_id = absint($wp->query_vars['order-received']);
$order_key = wc_clean($_GET['key']);
/**
* Replace {PAGE_ID} with the ID of your page
*/
$redirect = get_permalink($PageID);
$redirect .= get_option('permalink_structure') === '' ? '&' : '?';
$redirect .= 'order=' . $order_id . '&key=' . $order_key. '&noredirect=1';
wp_redirect($redirect);
exit;
}
}
我不確定是什麼問題,但我總是以無窮的方式獲取頁面重定向。然後,我通過互聯網衝浪,發現「網頁無法正確重定向」可能意味着您的重定向功能總是重定向回頁面本身。所以這是一個永無止境的循環。其中一個原因是當空值被傳遞給重定向函數。
我做了var_dump($ PageID)和whola,它傳遞null。
你一定在想,我很早就不去檢查,但我做到了。我使用了相同的代碼,並將它放在另一個文件中,我得到了$ PageID = 1(正如我在我的問題中所解釋的)。不太確定爲什麼VERY SAME代碼在我的插件文件中返回null。
我改變了這一行
$PageID = $wpdb->get_var('SELECT ID FROM '.$table_prefix.'posts WHERE post_content LIKE "%[myshortcode]%" AND post_parent = 0');
這直接
$PageID = $wpdb->get_var('SELECT ID FROM '.$wpdb->prefix.'posts WHERE post_content LIKE "%[myshortcode]%" AND post_parent = 0');
,是的,重定向是成功的這個時候。
我仍然不確定爲什麼前面的$ PageID查詢在其他文件中工作,但不在我的插件文件中。所以,我沒有真正學到任何東西。它剛剛被擊中和審判,我很幸運。
希望有人能指出實際的原因。直到那時,我才能幸福地生活在一起。謝謝Ren和Daniel需要時間回覆。
你在wordpress中嘗試過get_the_ID()函數嗎? get_the_ID()函數返回一個整數。這樣你就不會調用$ wpdb並執行db查詢。來源:https://developer.wordpress.org/reference/functions/get_the_id/ –
我不在循環中。我在循環之外工作。它實際上是一個將重定向用戶的插件。這麼長的故事拍攝,我在循環之外,get_the_ID將無法正常工作。 –
我明白了。這真的很奇怪,(int)$ PageID返回字符串。你也嘗試過intval($ PageID)嗎? –