2010-07-31 5 views
1

Récemment, Wordpress a ajouté dans le Trac que vous pouvez récupérer les messages de titre à l'aide:get_page_by_title dans Wordpress. Comment utiliser pour récupérer des messages?

get_page_by_title

Au lieu de demander directement la base de données. Si je voulais obtenir le titre intitulé «ma ferme», comment changerais-je les paramètres afin de rechercher un article (ou un type de message?):

$ page_title = 'Joey dans la forêt';

'character' est un type de message. Mais je ne sais pas comment ça marche. Je suppose que le retour par défaut est l'identifiant, qui serait $ post-> ID. Je ne sais pas ce qui serait l'équivalent si j'utilise un type de publication.

Merci pour l'aide de personne sur ce

Répondre

2

j'ai écrit a function (lié dans le rapport de bogue) qui fait exactement cela:

/** 
* 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

En fait, juste découvert ils ont ajouté "types post" argument get_page_by_title. A montré dans le codex. Mais ce code est vraiment bon. Merci beaucoup! – James

+1

Je ne sais pas pourquoi cela n'a pas encore eu de sursauts, c'est la seule réponse solide à ce problème que j'ai rencontré, merci! – nimrod

1

Depuis que je frappe sur cette page, d'autres pourraient aussi bien.

get_page_by_title() gère également les messages et les types de messages personnalisés.

Veuillez noter qu'il récupère le premier article/article de la base de données même si le message est saccagé.

Exemple:

$post = get_page_by_title('sample-post','post'); 
echo $post->ID