Warum kann man den ID-Auszug nicht wie beim Titel und den meisten anderen Elementen abrufen?
z.B. get_the_excerpt (ID). Ich weiß, wie man es mit der Funktion $ post-> post_excerpt verwendet, aber das gibt keinen Teil des Inhalts zurück, wenn kein Auszug eingegeben wurde. Es gibt einfach nichts zurück.
Ich versuche also, den Auszug nach ID abzurufen, wenn es einen Auszug gibt, und wenn es keinen Auszug mit dieser ID gibt, aber einige Inhalte, um stattdessen einen Teil des Inhalts abzurufen.
Wie würde man das machen?
Irgendwelche Ideen,
Wunderbar ...
BEARBEITEN -
Loop-Quellcode wie gewünscht.
<?php $stories = get_posts('category_name=feedback&numberposts=4');
foreach ($stories as $post) :
$title = $post->post_title;
$excerpt = get_the_excerpt_id($post->ID);
$thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
<div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
</div>
</div>
<script type="text/javascript">
var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
$('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);
</script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>
<?php echo $excerpt;?></div>
<?php endforeach;?>
Antworten:
Hi @ Robin I. Knight:
Ich betrachte es
get_the_excerpt()
als eine Funktion mit altem Design. Mit der zunehmenden Nutzung von WordPress gibt es viele neuere Anwendungsfälle, in denen es nicht passt, die neueren Funktionen zum Abrufen anderer Daten jedoch funktionieren. Ein Beispiel ist die mittlerweile häufige Verwendung einer$args
Reihe von Funktionsoptionen.Es lässt sich jedoch leicht auf Ihre Bedürfnisse abstimmen. Hier ist eine alternative Funktion, die Sie verwenden können und die Sie an einer beliebigen Stelle in die
functions.php
Datei Ihres Themas einfügen können:Ich habe es nicht getestet, bin mir aber ziemlich sicher, dass ich es richtig gemacht habe. Wenn dies nicht Ihren Bedürfnissen entspricht, arbeiten Sie es bitte aus und vielleicht kann ich andere Vorschläge machen.
quelle
setup_postdata($post)
am Anfang Ihrer Schleife anzurufen, wie @Rarst vorschlägt. Wenn dies nicht funktioniert, müssen Sie möglicherweise ein Plugin deaktivieren. hast du das versucht Und Sie möchten es wahrscheinlich nicht mehr aufrufen,get_the_excerpt_id()
da WordPress diese Funktion in Zukunft hinzufügen und Ihre Site beschädigen könnte. Und Sie könnten wahrscheinlich auf die Funktion in Ihrer Schleife verzichten, indem Sieforeach($stories as $story): global $post; $post = $story;
stattdessen verwenden.Die Mechanik des Ausschnitts ist äußerst verwirrend. Es ist keine präzise Antwort auf Ihre Frage, aber im Allgemeinen können Sie Loop folgendermaßen
get_posts()
emulieren, wenn Sie Template-Tags speziell für Loop erstellen und mit dem von Ihnen zurückgegebenen Array arbeiten müssen :quelle
setup_postdata()
globaler Abfragen nicht betroffen ist und nur Post-Daten zurückgesetzt werden müssen.Seit 3.3.0 gibt es eine neue Funktion: wp_trim_words
Ich benutze es außerhalb der Schleife wie folgt:
Dies ist nicht zu verwechseln mit wp_trim_excerpt , das anscheinend nur innerhalb der Schleife funktioniert, da es the_content () intern aufruft.
quelle
Nur um die Antwort von MikeSchinkel zu ergänzen, die aus irgendeinem Grund für mich nicht funktionieren würde. Ich musste die Zeile setup_postdata hinzufügen, damit es funktioniert.
}
Ich gehe davon aus, dass, wenn Sie dies außerhalb der Schleife verwenden, es andere Setup_post-Daten nicht beeinträchtigen sollte, die weitergehen.
Prost
quelle
Aufbauend auf der Antwort von @ Maxime, würde das funktionieren?
Es scheint mir einfach zu sein, aber ich frage mich, ob mir etwas fehlt.
quelle
Wenn ALLE Ihre Beiträge mit dem
<!--more-->
Tag versehen sind, können Sie mit Ihrem obigen Code Folgendes verwenden:Wenn Sie Beiträge haben, die nicht mit dem
<!--more-->
Tag versehen sind, werden diese natürlich vollständig angezeigt. Funktioniert in meiner Situation, aber nicht für alle ...quelle
Ich betrachte es
get_the_excerpt()
als eine Funktion mit altem Design. Mit der zunehmenden Nutzung von WordPress gibt es viele neuere Anwendungsfälle, in denen es nicht passt, die neueren Funktionen zum Abrufen anderer Daten jedoch funktionieren. Ein Beispiel ist die mittlerweile häufige Verwendung einer$args
Reihe von Funktionsoptionen.Es lässt sich jedoch leicht auf Ihre Bedürfnisse abstimmen. Hier ist eine alternative Funktion, die Sie verwenden können und die Sie an einer beliebigen Stelle in die
functions.php
Datei Ihres Themas einfügen können:Nur um die Antwort von MikeSchinkel zu ergänzen, die aus irgendeinem Grund für mich nicht funktionieren würde. Ich musste die Zeile setup_postdata hinzufügen, damit es funktioniert.
quelle
wp_reset_post_data()
innerhalb der Schleife funktionieren?Dies ist ein kleiner Zweizeiler, den ich häufig mit wp_trim_words benutze . Ich stelle ständig fest, dass ich die Abkürzung brauche und lese mehr Funktionen außerhalb der Schleife. Andere mögen dies nützlich finden. Also das ist, was ich benutze, um:
Ich habe dies direkt in die benutzerdefinierte Vorlage eingefügt, die ich gerade bearbeite.
Nervenzusammenbruch
1. Der auszug inhalt
Den Auszug nach Beitrags-ID abrufen, aber den Beitragsinhalt abrufen, wenn kein Auszug festgelegt wurde.
Ich benutze If / Else PHP-Kurzschrift .
2. Wortlänge
Stellen Sie die Anzahl der Wörter im Auszug auf 20 ein
3. Wählen Sie ReadMore Content (Link / Text).
Früher
$dapost->guid
habe ich die URL abgerufen, weil ich keine benutzerfreundlichen URLs benötigte und einen weiteren Aufruf der DB vermeiden wollte. Sie könnten immer get_the_permalink verwenden.Siehe wp_trim_words in der Wordpress-Dokumentation.
quelle
Das hat bei mir funktioniert:
quelle
Ab WP 4.5.0 ist die Verwendung der Post-ID als Parameter möglich
get_the_excerpt( $post->ID )
Quelle: https://developer.wordpress.org/reference/functions/get_the_excerpt/
quelle
Das geht schneller:
quelle