WordPress: ID anhand des Titels herausfinden
25.05.2010 in: PHP, Webdesign und WordPress • 2 Kommentare
Viele Template-Funktionen in WordPress erwarten eine ID als Argument – wp_list_pages() beispielsweise schließt damit einzelne Seiten aus.
Damit ich nun nicht immer suchen muß, habe ich mir einen kleinen Helfer in die Template-Tools gesetzt. Auszug:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<?php /** * Toscho’s Template Tools * * Helpers for WordPress templates. * * @author Thomas Scholz <[email protected]> * @version 1.1 * */ class TTT { /** * 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 = TTT::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 = TTT::id_by_title('CSS', 0, 'category'); * * The result is cached internally to save db queries. * * @param string $title * @param string $type Restrict the type. * @param string|bool $tax Taxonomy to search for. * @return int ID or -1 on failure */ static 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]; } } |
Im praktischen Einsatz sieht das dann so aus:
1 2 3 4 5 6 7 8 9 10 |
<?php wp_list_pages( array ( 'sort_column' => 'menu_order', 'depth' => 1, 'title_li' => '', 'exclude' => TTT::id_by_title('Start') ) ); ?> |
Vorsicht: Wenn man einen Titel mehrmals verwendet hat, liefert die Funktion eventuell nicht die ID zurück, die man sich erhofft hat.
Im Backend findet man die meisten IDs übrigens am besten mit Hilfe dieses ungeheuer nützlichen Plugins: Simply Show IDs.
Mehr solches Zeug:
Ralf Hortt am 05.07.2010 · 14:40
Am einfachsten finde ich eigentlich in der Statusleiste über den Link bearbeiten zu fahren.
Thomas Scholz am 05.07.2010 · 16:42
@Ralf Hortt: PHP hat keine Maus.