|
|||
WordPress - Post mit Hilfe eines Benutzerdefiniertes Feldes selektieren
Hallo,
ich möchte auf meiner Startseite verschiedene Posts oberhalb des Loops für die Beiträge ausgeben. Welche ausgegeben werden sollen möchte ich mit Hilfe der benutzerdefinierten Felder steuern. Die Ausgabe soll in 5 Boxen, wie auf den Screenshot zu sehen, dargestellt werden. Wenn das Benutzerdefinierte Feld "Startseite" eines Posts z.B. den Wert "1" hat, soll der Post in der ersten Box ausgegeben werden - usw. Die Ausgabe eines Posts mit einer ID ist kein Problem: Code:
$page_id = 2; // ID:2 = online + zeus $page_data = get_page( $page_id ); $content = apply_filters('the_content', $page_data->post_content); $title = $page_data->post_title; Danke für eure Hilfe! Screenshot: Uploaded with ImageShack.us Zur Zeit sieht meine index.php so aus: Code:
<?php get_header(); ?> <!-- BEGIN INDEX.PHP --> <div class="ym-col1"> <div class="ym-cbox"> <?php /* Grußwort auf Startseite anzeigen */ if (is_front_page()) : // Nur auf Startseite anzeigen if (!is_paged()) : // Nicht anzeigen wenn > Seite 1 $page_id = 2; // ID:2 = online + zeus $page_data = get_page( $page_id ); $content = apply_filters('the_content', $page_data->post_content); #$title = $page_data->post_title; ?> <div class="grusswort"> <?php echo $content; ?> </div> <div class="ym-grid ym-equalize linearize-level-1 startseite"> <div class="ym-g50 ym-gl"> <div class="ym-gbox"> <?php /* TODO post-id soll hier mit dem benutzerdef. feld selektiert werden */ $page_id = 2; // ID:2 = online + zeus $page_data = get_page( $page_id ); $title = $page_data->post_title; $content = apply_filters('the_content', $page_data->post_content); echo "<h2>".$title."</h2>"; echo $content; ?> </div> </div> <div class="ym-g50 ym-gr"> <div class="ym-gbox"> <h2>Test</h2> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> </div> </div> </div> <div class="ym-grid ym-equalize linearize-level-1 startseite"> <div class="ym-g33 ym-gl"> <div class="ym-gbox"> <h2>Test</h2> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> </div> </div> <div class="ym-g33 ym-gl"> <div class="ym-gbox"> <h2>Test</h2> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> </div> </div> <div class="ym-g33 ym-gr"> <div class="ym-gbox"> <h2>Test</h2> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p> </div> </div> </div> <h2 id="neuigkeiten">Neuigkeiten aus Steinweiler</h2> <?php endif; // end if_paged endif; // end if_front_page ?> <?php if ( have_posts() ) : ?> <?php /* Start the Loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> <?php endwhile; ?> <?php else : ?> <div id="post-0" class="post no-results not-found"> <h3>Nichts gefunden ...</h3> <div class="post-content"> <p>... was den Suchkriterien entspricht. Neue Suche:</p> <?php get_search_form(); ?> </div> </div><!-- #post-0 --> <?php endif; ?> </div> <!-- end ym-cbox --> </div> <!-- end ym-col1 --> <!-- END INDEX.PHP --> <?php get_sidebar(); ?> <?php get_footer(); ?> |
Sponsored Links |
|
|||
Habe mit SQL einen Weg gefunden die Post-ID zu selektieren und das ganze in die functions.php gepackt:
Code:
/** * Post mit Hilfe eines benutzerdefinierten Feldes selektieren */ if ( !function_exists('get_post_meta_value') ) { function get_post_meta_value ($meta_value) { global $wpdb; //$wpdb->show_errors(); $sql =" select post_id from wp_postmeta where meta_key = 'startseite' and meta_value = '$meta_value' "; $post_id = $wpdb->get_var($sql); $post_data = get_post( $post_id ); $title = apply_filters('the_title', $post_data->post_title); $content = apply_filters('the_content', $post_data->post_content); echo "<h2>".$title."</h2>"; echo $content; } } |
Sponsored Links |
|
||||
Du machst es dir unnötig schwer.
Weißt du nach 3 Monaten noch genau welcher Post wo an welcher Stelle steht? Wäre es nicht um längen einfacher die ID der Posts, die auf der Startseite dargestellt werden, einfach in die Startseite reinzuschreiben in der Reihenfolge wie sie erscheinenen sollen? Anschließend kannst du dann dieses Feld auslesen und mit einer Foreach-Schleife die Posts auslesen.
__________________
Hier ein immer gültiges Statement: Überarbeite deine Code, lerne die Grundlagen, widersprich mir nicht, wehre dich nicht, ich habe Recht, wir sind Lolgion, wir sind viele.. potato... All meine Angaben sind ohne Gewähr, es könnte also trotz meiner Unfehlbarkeit dazu kommen dass ich falsch liege www.richard-thiel.de | Müssen Websiten überall gleich ausschauen? |
|
|||
Hallo Thielo,
danke für deinen Tipp! D.h. also ich müsste eine statische Seite als Startseite definieren, dieser dann ein extra Template zuweisen und im benutzerdefinierten Feld dieser Seite die ID's der Posts speichern die angezeigt werden sollen? Edit: Bin grad am überlegen ob ich es nicht über die theme-options mache und hier einfach die id's der posts definiere ... Geändert von darkiop (08.12.2012 um 18:22 Uhr) |
|
||||
Zitat:
PHP-Code:
|
|
|||
Hallo David, danke für deinen Tipp - diese Möglichkeit habe ich Ursprünglich gesucht.
Mittlerweile habe ich mein Problem allerdings folgendermaßen gelöst: Ich habe über die Theme-Options ein Feld definiert das die ID's der Artikel beinhaltet welche auf der Startseite als wichtige Artikel angezeigt werden sollen. Ob ich bei der Lösung bleibe wird sich dann in der Praxis zeigen. Siehe [PHP] front-page.php - Pastebin.com Code:
function wichtige_beitraege ($post_id) { $post_data = get_post( $post_id ); $title = apply_filters('the_title', $post_data->post_title); $content = apply_filters('the_content', $post_data->post_content); $permalink = get_permalink($post_data->ID); $excerpt = preg_replace("/[^ ]*$/", '', substr($content, 0, 350)); echo "<h2>".$title."</h2>"; echo $excerpt."..."; echo "<p><a href=\".$permalink.\">Weiterlesen ...</a></p>"; }
Vielen Dank für eure Hilfe, und noch einen schönen 2. Advent! |
|
|||
Hallo David,
zu 1.: Danke - funktioniert ohne weiteres - beim nächstes mal weis ich das zu 2.: Schau ich mir heute Abend mal genauer an - in einem ersten Versuch blieb $content unangetastet. zu 3.: In meinem Beispiel hier sind es HTML-Elemente - in der Praxis könnten aber auch Shortcodes zum Einsatz kommen ([caption]). |
|
|||
So, hab durch Zufall eine Funktion gefunden die meine "Probleme" 2. und 3. löst - vieleicht kann das ja noch jemand gebrauchen.
Ist eine Erweiterung der WordPress internen Funktion wp_trim_excerpt(): David, danke für deine Hilfe! Code:
/** * Generates an excerpt from the content, if needed. * * @param int|object $post_or_id can be the post ID, or the actual $post object itself * @param string $excerpt_more the text that is applied to the end of the excerpt if we algorithically snip it * @return string the snipped excerpt or the manual excerpt if it exists */ function zg_trim_excerpt($post_or_id, $excerpt_more = ' [...]') { if ( is_object( $post_or_id ) ) $postObj = $post_or_id; else $postObj = get_post($post_or_id); $raw_excerpt = $text = $postObj->post_excerpt; if ( '' == $text ) { $text = $postObj->post_content; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); // don't automatically assume we will be using the global "read more" link provided by the theme // $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); } -------------- Edit: Ich habe jetzt doch eine andere Variante von der Seite genommen (und leicht modifiziert), da bei der ersten immer die gleichen Texte in den Artikeln ausgegeben wurden. Habe aus der Funktion den Parameter $excerpt entfernt da mir dessen Sinn noch nicht klar ist ... ohne ihn komme ich jedenfalls zu meinem gewünschten Ergebnis. Code:
function my_excerpt($text) //function my_excerpt($text, $excerpt) { //if ($excerpt) return $excerpt; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); } Geändert von darkiop (11.12.2012 um 18:53 Uhr) |
Sponsored Links |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Hilfe bei Wordpress Theme | sepp88 | Site- und Layoutcheck | 0 | 20.02.2010 19:44 |
Wordpress Werbung nach erstem Post einfügen | uspri | Serveradministration und serverseitige Scripte | 4 | 18.12.2009 15:59 |
Java Script in Wordpress Post!? | carstiee09 | Javascript & Ajax | 6 | 29.04.2009 09:28 |