0

カスタムWP3.5関数があり、なぜそれが機能しないのかわかりません...エラーはSQLクエリ内にあると確信しています。この関数が実行しようとしているのは、投稿のスラッグが$post_nameで始まる特定のカテゴリから投稿を取得することです。

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

2 に答える 2

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

于 2013-01-06T02:53:50.303 に答える
0

I found a solution! What I did was to prepend "$wpdb->" on each table name and escape % character (%%). The function below works now:

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;
}
于 2013-01-07T01:47:03.827 に答える