2010-07-31 66 views
1

近日,在WordPress的Trac的补充,可以使用通过取标题的帖子:相反wordpress中的get_page_by_title。如何使用获取帖子?

get_page_by_title

查询数据库直线上升的。如果我想获得一篇题为“我的农场”的帖子,我将如何更改参数以便搜索帖子(或帖子类型?):

$ page_title ='Joey in the forest';

'character'是帖子类型。但不知道如何工作。我假设默认返回是id,这将是$ post-> ID。不确定如果我使用帖子类型,会是什么。

感谢任何人对这个

回答

2

我写a function(在错误报告的链接)帮助它正是这么做的:

/** 
* Retrieves a post/page/custom-type/taxonomy ID by its title. 
* 
* Returns only the first result. If you search for a post title 
* that you have used more than once, restrict the type. 
* Or don’t use this function. :) 
* Simple usage: 
* $page_start_id = id_by_title('Start'); 
* 
* To get the ID of a taxonomy (category, tag, custom) set $tax 
* to the name of this taxonomy. 
* Example: 
* $cat_css_id = id_by_title('CSS', 0, 'category'); 
* 
* The result is cached internally to save db queries. 
* 
* @param string  $title 
* @param string  $type Restrict the post type. 
* @param string|bool $tax Taxonomy to search for. 
* @return int   ID or -1 on failure 
*/ 
function id_by_title($title, $type = 'any', $tax = FALSE) 
{ 
    static $cache = array(); 

    $title = mysql_real_escape_string(trim($title, '"\'')); 

    // Unique index for the cache. 
    $index = "$title-$type-" . ($tax ? $tax : 0); 

    if (isset ($cache[$index])) 
    { 
     return $cache[$index]; 
    } 

    if ($tax) 
    { 
     $taxonomy  = get_term_by('name', $title, $tax); 
     $cache[$index] = $taxonomy ? $taxonomy->term_id : -1; 

     return $cache[$index]; 
    } 

    $type_sql = 'any' == $type 
     ? '' 
     : "AND post_type = '" 
      . mysql_real_escape_string($type) . "'"; 

    global $wpdb; 

    $query = "SELECT ID FROM $wpdb->posts 
     WHERE (
       post_status = 'publish' 
      AND post_title = '$title' 
      $type_sql 
     ) 
     LIMIT 1"; 

    $result = $wpdb->get_results($query); 
    $cache[$index] = empty ($result) ? -1 : (int) $result[0]->ID; 

    return $cache[$index]; 
} 
+0

其实,刚发现他们补充说, “文章类型” 参数get_page_by_title。在代码中显示它。但是这个代码非常好。非常感谢! – James 2010-08-02 02:05:27

+1

不知道为什么这还没有得到任何upvotes,这是我遇到的这个问题的唯一可靠的答案,谢谢! – nimrod 2013-04-28 13:57:33

1

自从我偶然发现这个页面,别人还不如。

get_page_by_title()也处理帖子和自定义帖子类型。

请注意,即使该帖子被删除,它也会获得数据库中的第一个帖子/页面项。

样品:

$post = get_page_by_title('sample-post','post'); 
echo $post->ID 
相关问题