zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden WordPress - Post mit Hilfe eines Benutzerdefiniertes Feldes selektieren

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 08.12.2012, 15:43
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Standard 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;
Aber wie komme ich mit dem benutzerdefinierten Feld auf die entsprechende ID um den Post auszugeben?

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(); ?>
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 08.12.2012, 17:06
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Pfeil

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;
  }
  
}
Gibt es evtl. noch anderen Lösungen?
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 08.12.2012, 17:50
Benutzerbild von Thielo
Web Ninja
XHTMLforum-Kenner
 
Registriert seit: 17.09.2009
Ort: Stuttgart oder so
Beiträge: 3.372
Thielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein Lichtblick
Standard

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?
Mit Zitat antworten
  #4 (permalink)  
Alt 08.12.2012, 18:15
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Frage

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 ...
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten

Geändert von darkiop (08.12.2012 um 18:22 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 08.12.2012, 19:40
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von darkiop Beitrag anzeigen
Aber wie komme ich mit dem benutzerdefinierten Feld auf die entsprechende ID um den Post auszugeben?
Stichwort: »Meta Query« Class Reference/WP Query « WordPress Codex

PHP-Code:
$posts get_posts(
    array(
        
'meta_query' => 
            array(
                array( 
                    
'key' => 'Startseite',
                    
'value' => '1',
                    
'compare' => '>='
                
),
                
//....
            
)
    )

__________________
github | http://dnaber.de
Mit Zitat antworten
  #6 (permalink)  
Alt 09.12.2012, 13:36
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Frage

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>";

}
Folgende Probleme habe ich noch:
  1. Das Blättern funktioniert nicht mehr - ich bekomme auf "/page/2" die gleichen Artikel angezeigt wie auf der Startseite
  2. Ich schneide den Inhalt mit "$excerpt = preg_replace("/[^ ]*$/", '', substr($content, 0, 350));" zurecht - gibt es hierfür auch eine passende Funktion von WordPress? Mit the_excerpt() bin ich nicht weiter gekommen.
  3. Wie bekomme ich Bilder aus $content herausgefiltert? Ich möchte in den Boxen nur Text anzeigen lassen.

Vielen Dank für eure Hilfe, und noch einen schönen 2. Advent!
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten
Mit Zitat antworten
  #7 (permalink)  
Alt 10.12.2012, 10:19
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

1. Klar, weil Du die eigentliche Query nicht mehr nutzt sonder selbst eine Definierst. (Zeile 87). Du musst die eintsprechende Query-Variable auch an das Objekt übergeben.
PHP-Code:
$query = new WP_Query
    array( 
        
'post__not_in' => $post_id,  
        
'paged'        => get_query_var'paged' )
    ) 
); 
2. Schau dir mal die Funktion wp_trim_excerpt() an (in wp-includes/formating.php)

3. Kommt darauf an, wie die Bilder in $content vorliegen. Als noch zu Übersetzende Shortcodes? Als HTML-Elemente?

Im Übrigen bringt es nichts, erst zu schauen, ob in der Default-Query Posts existieren( have_posts(), Z83) und dann eine eigene Query zu starten. Da du keine else-Behandlung definierst, kannst Du diese Bedingung auch weg lassen.
__________________
github | http://dnaber.de
Mit Zitat antworten
  #8 (permalink)  
Alt 10.12.2012, 17:06
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Standard

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]).
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten
Mit Zitat antworten
  #9 (permalink)  
Alt 11.12.2012, 15:45
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von darkiop Beitrag anzeigen
zu 3.: In meinem Beispiel hier sind es HTML-Elemente - in der Praxis könnten aber auch Shortcodes zum Einsatz kommen ([caption]).
Dann kombiniere die PHP-Funktion strip_tags() mit der WP-Funktion strip_shortcodes().
__________________
github | http://dnaber.de
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 11.12.2012, 18:16
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2007
Ort: Rheinland-Pfalz
Beiträge: 326
darkiop wird schon bald berühmt werden
Daumen hoch

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(']]>', ']]&gt;', $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);
}
Gefunden auf: excerpt - Using wp_trim_excerpt to get the_excerpt() outside the loop - WordPress Answers

--------------

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(']]>', ']]&gt;', $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);
}
http://wordpress.stackexchange.com/q...loop/7400#7400
__________________
Mein Blog | Hier im Forum: FAQ

Viele Grüße, Thorsten

Geändert von darkiop (11.12.2012 um 18:53 Uhr)
Mit Zitat antworten
Sponsored Links
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:37 Uhr.