2009-10-08 12 views
43

Mam problem z niestandardowym motywem WordPress, który rozwijam. Jest to nieco zawiłe, ale w zasadzie muszę uzyskać identyfikator posta według jego tytułu. W pseudo-kodzie idealnie byłoby mieć coś takiego:Uzyskaj identyfikator Post WordPress z tytułu Post

title = "foo"; 
post_id = get_post_id_where_title_is(title); 

Tytuł wspomniano jest statyczną odniesienia nie są pobierane z WordPress, jest już obecny na stronie.

Z góry dziękuję.

Odpowiedz

82

Tylko szybka uwaga dla każdego, kto natyka się na to:
get_page_by_title() może teraz obsłużyć każdy rodzaj post.
Parametr $post_type został dodany w pakiecie WP 3.0.

+17

+1 zawsze lepiej używać funkcji rdzenia niż jakieś arbitralne zapytanie mySQL. –

+2

Nazwa funkcji jest jednak myląca. – msiemens

18

Znaleźliśmy rozwiązanie, jeśli ktoś z nim walczy. Opublikowali to pytanie z desperacji po 4 godzinach testów/Googling!

function get_post_by_title($page_title, $output = OBJECT) { 
    global $wpdb; 
     $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type='post'", $page_title)); 
     if ($post) 
      return get_post($post, $output); 

    return null; 
} 

Znaleziono na: http://sudarmuthu.com/blog/2009/09/18/retrieving-posts-and-pages-based-on-title-in-wordpress.html

+0

Wystarczy umieścić tę funkcję w pliku functions.php. – Littlejon

+2

Pamiętaj, że możesz chcieć zmienić post_type na "page", jeśli chcesz uzyskać identyfikator strony. Możesz także pominąć post_type z SQL where klauzula, aby przeszukać wszystkie wersje, strony i posty, itp. (Wszystkie typy innymi słowy.) –

+2

Podejrzewam, że może to spowodować powrót wersji roboczych/kosza, ponieważ nie ma kryteriów 'status = 'opublikowany'' .... –

0

Innym sposobem uzyskania Post i identyfikator strony, jest użycie wtyczki ..

jest plugin, który po prostu robi to, co jest po prostu dodać kolumnę do wszystkich stron, wszystkich stanowisk, wszystkie Kategorie tabele i mieć tytuł kolumny ID ... a tuż poniżej, widać cały identyfikator strony/post wymienione w tej kolumnie ..

myślę, że powinno być bardzo przydatna ..

i używaj tej wtyczki bardzo często i jest bardzo lekki.

http://getyourblogready.com/?p=758

+0

Kod księgowania byłby dla nas bardziej przydatny, abyśmy mogli zorientować się, co proponujesz ... – nickhar

0

Nie trzeba używać żadnych querys SQL lub wtyczki, należy użyć standardowych Wordpress funkcje dla tego

$page = get_page_by_title('Home'); 
$page_id = $page->ID; 
1

można użyć następującego kodu, jak na [link] [http://codex.wordpress.org/Function_Reference/get_page_by_title] 1)!

<?php 
$page = get_page_by_title('About'); 
wp_list_pages('exclude=' . $page->ID); 
?> 
0

łatwo uzyskać identyfikator post z tytułu po poprzez wysłanie WP:

global $wpdb; 

$rw = $wpdb->get_row($wpdb->prepare("select * from "your post table name" where post_title='your variable name or your post title'")); 

echo $rw->ID; 
0

1) różnią POST_TITLE i POST_NAME od siebie. post_name może to ślimak. post_title to tytuł postu.

2)

$titlee = "yourtitle"; 
echo $id = $wpdb->get_var("SELECT ID FROM $GLOBALS['wpdb']->posts WHERE post_name = $titlee"); 
+0

W jaki sposób można uzyskać odpowiedź na pytanie? –

7

Podobnie jak Michał Mau wymienić:

Użyj

$my_post = get_page_by_title('My Title', OBJECT, 'post'); 
echo $my_post->post_content; 

To ($page_title, $output, $post_type) łatwo otrzymać stanowisko zamiast strony.

2

Może to pomoże bardziej poprzez stworzenie funkcji, dzięki czemu nie trzeba powtarzać kod

function get_page_id_by_title($title) 
{ 
$page = get_page_by_title($title); 
return $page->ID; 
} 

$title = "your title"; 
get_page_id_by_title($title);