2016-03-18 43 views
0

可以說我有「myshortcode」作爲短代碼。我已經使用[myshortcode]在wordpress頁面(pageid = 1)中插入了這個簡碼。WordPress - 獲取包含短代碼的頁面ID

如何獲取代碼文件中的頁面ID?我搜索並得到了這個似乎給我ID的解決方案。

global $wpdb; 

$PageID = $wpdb->get_var('SELECT ID FROM '.$table_prefix.'posts WHERE post_content LIKE "%[myshortcode]%" AND post_parent = 0'); 

但問題是它返回頁面id作爲一個字符串。所以我似乎無法用數字來表示。

例如,如果我在wp_redirect中使用它,我會收到錯誤,表示頁面沒有正確重定向

我試過(int)$ PageID但似乎沒有解決問題。

任何幫助?

+0

你在wordpress中嘗試過get_the_ID()函數嗎? get_the_ID()函數返回一個整數。這樣你就不會調用$ wpdb並執行db查詢。來源:https://developer.wordpress.org/reference/functions/get_the_id/ –

+0

我不在循環中。我在循環之外工作。它實際上是一個將重定向用戶的插件。這麼長的故事拍攝,我在循環之外,get_the_ID將無法正常工作。 –

+0

我明白了。這真的很奇怪,(int)$ PageID返回字符串。你也嘗試過intval($ PageID)嗎? –

回答

1

我解決了它。然而,我不確定問題是什麼。就像我提到的,我在插件中工作。這是應該重定向的代碼。

// 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需要時間回覆。

+1

我很高興你解決了它! :thumbsup: –

+0

不客氣:-) –