需求: 依照Slug获得Post.
解决方案: API只有getPost(by ID), 我们要创建一个getPostBySlug. (Slug具有唯一性, 可参见表wp_posts,post_name 及有关代码)
Get Post by Slug:
```
<?php
function get_post_by_slug($post_name, $output = OBJECT)
{
global $wpdb;
$post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='post'", $post_name ));
if ( $post )
return get_post($post, $output);
return null;
}
?>
```
对于英文的地址来说, 以上代码可以很好的工作, 但如果slug是中文, 就无法工作了, 无法Select到任何东西. 经过Debug, 发现如果slug为中文, 将不会进行任何Select. 如果不使用prepare, 直接使用qury, 则可解决, 解决后的代码:
```
/**
* WP integration: 根据Slug/Post_name返回PostID, 交由后续程序继续处理.
* 不直接返回Post的原因是API中getpost()还有很多额外操作, 因此如果需要获得Post, 则可使用: get_post($id);
* @param $post_name slug
* @param $output 对应post的ID
* @return Integer
*/
function wpi_get_post_id_by_slug($post_name, $output = OBJECT) {
global $wpdb;
$sql = "SELECT ID FROM $wpdb->posts WHERE post_name = '" . urlencode($post_name) . "' AND post_type='post'";
$postID = $wpdb->get_var($sql);
return $postID;
}
```