2013-01-06 61 views
0

我有一個自定義WP 3.5功能,我不知道爲什麼它不工作......我相信這個錯誤是在SQL查詢。該函數試圖做的是從特定類別中獲取帖子的slug以$ post_name開頭的帖子。WordPress的自定義函數get_post_like_slug不工作?

function get_post_like_slug($post_name) { 
    global $wpdb; 
    $page_name = substr($post_name, 0, -1).'%'; 
    $id = $wpdb->get_var($wpdb->prepare("SELECT $wpdb->posts.ID FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) WHERE ($wpdb->term_relationships.term_taxonomy_id = 5 AND $wpdb.post_name LIKE %s)", $post_name)); 

    if ($id) 
     return ($id); 

    return null; 
} 
+0

您能否將解決方案移至答案並解釋您做了什麼?這對其他人會更有幫助。 – bobs

回答

0

在另一篇文章中看到了關於在wordpress中正確使用like語句的問題。

可能是這樣的:

$id = $wpdb->get_var($wpdb->prepare("SELECT $wpdb->posts.ID FROM 
    $wpdb->posts LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = 
    $wpdb->term_relationships.object_id) WHERE 
    ($wpdb->term_relationships.term_taxonomy_id = 5 AND $wpdb.post_name 
    LIKE %s)", '%' . like_escape($post_name) . '%')); 

這裏是到該帖子的鏈接:https://wordpress.stackexchange.com/a/8847

+0

嗯,你幫我意識到在wpdb中使用LIKE可能是一團糟,但它仍然不起作用 –

0

我找到了解決辦法!我所做的是在每個表名稱前面加上「$ wpdb->」並轉義%字符(%%)。下面的功能現在可以工作:

function get_post_like_slug($post_name) { 
    global $wpdb; 
    $post_name = substr($post_name, 0, -1); 
    $id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id WHERE post_name LIKE %s AND $wpdb->term_relationships.term_taxonomy_id=5 LIMIT 1", $post_name.'%%')); 

    if ($id) 
     return ($id); 
    return null; 
} 
相關問題