Php Wordpress:在slug名称类似的地方获取帖子id

Php Wordpress:在slug名称类似的地方获取帖子id,php,sql,wordpress,Php,Sql,Wordpress,请帮助我使用我的自定义函数get\u post\u by\u slug,该函数尝试查询数据库并从特定类别(id=5)中获取slug与类似的帖子id。它一直工作到WP 3.5,但现在坏了,我认为缓存可能有问题。我为wp3.5添加了$wpdb->prepare,但它并没有真正解决问题 function get_post_by_slug($post_slug) { global $wpdb; $post = $wpdb->get_var($wpdb->prepare("SELECT

请帮助我使用我的自定义函数
get\u post\u by\u slug
,该函数尝试查询数据库并从特定类别(
id=5
)中获取slug与
类似的帖子id。它一直工作到WP 3.5,但现在坏了,我认为缓存可能有问题。我为wp3.5添加了
$wpdb->prepare
,但它并没有真正解决问题

function get_post_by_slug($post_slug) {
  global $wpdb;
  $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id WHERE post_name LIKE '%s%' AND term_taxonomy_id=5 LIMIT 1", $post_slug));
  return $post;
}

提前谢谢

prepare
类似于
sprintf
,因此它使用了您用于
%
,您可以这样做。 此外,您还应删除
'
周围的
%s
如果您使用prepare,prepare将为您报价。我想下一个例子对你有用

function get_post_by_slug($post_slug) {
    global $wpdb;
    $post_slug = '%' . $post_slug . '%';
    $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id WHERE post_name LIKE %s AND term_taxonomy_id=5 LIMIT 1", $post_slug));
    return $post;
}

通过slug获取post id的最简单解决方案是:

$your_desired_title = "yourtitle";

global $wpdb;
$id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = $your_desired_title ");
echo $id;

感谢$wpdb->prepare()上的提示,但是,查询仍然不会返回帖子…当我运行此查询时:
SELECT ID FROM wp_posts LEFT JOIN wp_term_relationships on wp_posts.ID=wp_term_relationships.object_ID WHERE post_name像“%hello world%”和term_taxonomy_ID=2 LIMIT 1
,所以,也许你可以手动测试它,看看有什么问题。实际上,发生了一件奇怪的事情。函数总是返回相同的结果。。。有我不知道的缓存吗?WP缓存这样的东西吗?它不应该在数据库中缓存,你们在phpMyAdmin中做过实验吗?它不会缓存不同的查询。更可能的是你的post_slug是相同的,你检查过了吗?