Cum obțin ID-ul unui articol (pagină sau CPT) folosind titlul sau slug-ul?
Am căutat în Codex, nu am reușit să folosesc get_page_by_title() și sunt destul de surprins că nu pare să existe o funcție WordPress standard pentru această sarcină.
Am nevoie să obțin ID-ul oricărui articol/ CPT sau pagină folosind fie slug-ul, fie titlul paginii/articolului. Ideal, caut ceva de genul:
get_post_ID_by_title('Titlul articolului meu', 'customposttype');
Ce ar trebui să fac?

Actualizare: Începând cu WordPress 3.0, puteți utiliza funcția încorporată get_page_by_title
cu al treilea parametru $post_type
:
$post = get_page_by_title( 'Titlul Postării', OBJECT, 'post_type' );
$post_id = $post ? $post->ID : 0;
Răspunsul Original
puteți utiliza această funcție care a apărut prin căutarea pe Google "get post by title"
/**
* Obține o postare pe baza titlului ei.
*
* @uses $wpdb
*
* @param string $post_title Titlul paginii
* @param string $post_type tipul postării ('post','page','orice tip personalizat')
* @param string $output Opțional. Tipul de ieșire. OBJECT, ARRAY_N sau ARRAY_A.
* @return mixed
*/
function get_post_by_title($page_title, $post_type ='post' , $output = OBJECT) {
global $wpdb;
$post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type));
if ( $post )
return get_post($post, $output);
return null;
}

Până acum am reușit să evit utilizarea interogărilor la baza de date, deoarece prefer să folosesc funcțiile standard din WP. Este într-adevăr singura modalitate de a obține ceea ce am nevoie?

Codul postat este practic o copie directă a get_page_by_title
funcției, diferența majoră fiind că va funcționa și pentru tipurile non-hierarhice, așa că merită să o ai în colecția ta de funcții.

@t31os Nu am spus niciodată că este a mea, doar am adăugat parametrul $post_type și da, o adaug în colecția mea.

Nu te acuzam de nimic, prietene, dimpotrivă susțineam răspunsul tău.. ;) Ți-am dat deja +1.. :)

În ce fel diferă aceasta de funcția nativă get_page_by_title()
?.. get_page()
este practic un alias pentru get_post()
, nu văd cum această modificare ar avea vreun impact.

@Rarst Acum că ai menționat asta, este același lucru, nu văd nicio diferență.

@t31os deci unde intervine chestia non-hierarhică pe care ai menționat-o dacă funcția este în esență aceeași?..

Nu știu la ce mă gândeam dimineața, get_page apelează get_post oricum și nu am niciun indiciu de ce credeam că get_page funcționează doar pentru tipurile ierarhice, nu cred că este adevărat așa cum se întâmplă.

Îți lipsește un parametru al funcției. Pune null pentru al doilea parametru opțional $output și această funcție ar trebui să funcționeze pentru tine.
get_page_by_title('Titlul postării mele', null, 'customposttype');
Tocmai am întâmpinat aceeași problemă și adăugarea lui null a rezolvat-o pentru mine.

De obicei, evit interogările directe pe baza de date. În schimb, folosesc obiectul WP_Query
pentru a procesa lucrurile în locul meu.
Aceasta este, în esență, o funcție pe care o folosesc într-unul dintre temele mele pentru a obține un post pe baza unui slug dat:
function get_post_id( $slug, $post_type ) {
$query = new WP_Query(
array(
'name' => $slug,
'post_type' => $post_type
)
);
$query->the_post();
return get_the_ID();
}
Aceasta va crea o interogare folosind API-ul WordPress pentru a prelua un post de un anumit tip cu un slug specific, va rula funcțiile obișnuite ale buclei pe rezultat și va returna ID-ul postului. De asemenea, ai putea să o modifici puțin pentru a returna întregul post, dar asta depinde de tine.

Acest lucru este de câțiva ani, dar încă apare când cauți pe Google. Deci, iată o metodă simplă pentru a face acest lucru:
$page = get_page_by_title( 'titlul postării mele' );
sau
$page = get_post_ID_by_title('titlul postării mele', OBJECT, 'tipcustomdepostare');
Apoi folosește obiectul $page pentru a obține ID-ul:
$page->ID

În prezent (WP >4.9.2) puteți găsi orice post/pagină etc. după titlu/slug în felul următor:
$page = get_posts(
array(
//'name' => 'your-post-slug', // după slug-ul postului
'title' => 'Titlul postului tău', // după titlul postului
'post_type' => 'page' // tipul de post dorit
)
);
if ($page = $page[0]) // Primul/cel mai mic ID este luat dacă există mai multe obiecte
{
// Apoi faci ce este necesar...
// $id = $page->id;
// $content = $page->post_content;
// sau $content = apply_filters('the_content', $page->post_content);
// etc.
}
