2013-01-06 2 views
0

나는 사용자 정의 WP 3.5 함수를 가지고 있는데, 나는 그것이 왜 작동하지 않는지 전혀 모른다. 나는 그 오류가 SQL 질의 안에 있다고 확신한다. 함수가 수행하려고 시도하는 것은 게시물의 슬러그가 $ 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와 같은 구문을 올바르게 사용하여 다른 게시물을 보았습니다.

는 다음과 같이 될 수 있습니다

$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; 
} 
관련 문제