Neueste Kommentare einbinden/Code
-
Hallo zusammen,
leider verzweifle ich. Ich versuche, wenn man auf die Website geht, im Feld (Tabelle) oben rechts „Letzte Kommentare:“ die letzten Kommentare anzuzeigen, bedauerlicherweise klappt es nicht. Ich habe unter anderem den Code aus der Widget-Gruppe probiert, es wird dann auch angezeigt. Wenn ich einen Testeintrag mache, wird der Eintrag nicht angezeigt. Also aktualisiert es sich enttäuschenderweise nicht.
Hat eventuell einer den Code, den man dafür benötigt?
3 Einträge würden genügen:
Poster zu Thema am Datum
Im Idealfall noch eine Textanzeige über 60 Zeichen.https://www.gdz.bplaced.net/test-seite/ Hier ist so ein Eintrag: Neueste Kommentare, welchen ich gerne oben im Kasten rechts haben möchte.
Vielen Dank und ich hoffe, dass ich es einigermaßen begreiflich beschreiben konnte.
Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]
-
🤔 Hm, die Support-Foren sind eigentlich dazu gedacht, bei Anwendungs-Problemen Unterstützung zu bieten und nicht auf Zuruf irgendwelche Code-Schnipsel zu liefern. Außerdem bist du bei Fragen zur Programmierung bei WordPress Stackexchange besser aufgehoben.
Wir auch immer … Schnell zusammgesetzt und trotzdem hoffentlich richtig:
<?php
function display_latest_comments() {
$latest_comments = get_latest_comments();
if (empty($latest_comments)) {
return;
}
$html = '<div class="latest-comments">';
foreach ($latest_comments as $comment) {
$html .= '<p>'
. $comment->comment_author
. ' zu '
. get_the_title($comment->comment_post_ID)
. '<br>'
. $comment->comment_content
. '</p>';
}
$html .= '</div>';
echo $html;
}
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
}(Der Code gehört – ohne das einleitende
<?php
– in diefunctions.php
deines (Child)-Themes.)Im Template fügst du dann an geeigneter Stelle noch
<?php display_latest_comments(); ?>
ein.Wieso du im Header eine HTML-Tabelle verwendest, wollen wir hier lieber nicht vertiefen. Ich müsste sonst noch Grundlagen in CSS vermitteln, wozu uns hier die Zeit fehlt.
Danke für deine Hilfe, komme leider aber damit nicht weiter.
Wo muss der Block hin?
Zur Beantwortung deines Anliegens warum so, das liegt daran, dass ich das Plugin Code-Snippets nutze, da es für mich einfach zu bedienen ist und man schnell, was auch vorkommt Änderungen machen kann. Das Plugin bietet die Möglichkeit, die Tabellen über den Header zu setzen.
Du hast aber recht, am Ende sollte es nicht so bleiben, aber für eine Weile bleibt mir keine andere Möglichkeit.Wo muss der Block hin?
In die
functions.php
eines Child-Themes oder auch als Code-Snippet. Nur die Zeile<?php display_latest_comments(); ?>
musst du im Template des Child-Theme einbauen.warum so, das liegt daran, dass ich das Plugin Code-Snippets nutze
Das erklärt trotzdem nicht, wieso du eine Tabelle verwendest. Aber wie gesagt führt das hier zu weit.
aber für eine Weile bleibt mir keine andere Möglichkeit.
Doch, natürlich. Wenn du mit dem Block-Editor arbeitest, kannst du z.B. eine neue Seite erstellen, einen Spalten-Block mit 4 Spalten einfügen, …
dann über das Kebab-Menü (1) in den Code-Editor wechseln und das HTML kopieren:<!-- wp:columns {"align":"wide"} -->
<div class="wp-block-columns alignwide"><!-- wp:column -->
<div class="wp-block-column">Hier den Inhalt einfügen</div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column">Hier den Inhalt einfügen</div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column">Hier den Inhalt einfügen</div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><?php display_latest_comments(); ?>
</div>
<!-- /wp:column --></div>
<!-- /wp:columns -->An die Stelle von „Hier den Inhalt einfügen“ fügst du das ein, was du bisher in Tabellenzellen gepackt hast. Viel einfacher geht es wirklich nicht …
Leider bekomme ich, egal wie ich es mache, immer den gleichen Fehler, wenn ich das einsetze:
<!-- wp:column -->
<div class="wp-block-column"><?php display_latest_comments(); ?></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->Fehlermeldung:
Dieser Block enthält unerwarteten oder ungültigen Inhalt.
Blockwiederherstellung versuchenIn der Funktions.php habe ich das von dir eingesetzt, wie beschrieben, danke dafür.
Ach so, ich habe es auch so versucht, wie du es beschrieben hast auf meiner Testseite.Stimmt, PHP in einen Block einfügen funktioniert so nicht. Da habe ich nicht nachgedacht. Sorry.
Ich gehe davon aus, dass du ein klassisches, nicht block-basiertes Theme erstellst, bei dem du in den Templates normales HTML verwendest? Dann könnte der Bereich, den du mit Tabellen darstellst, so aussehen:
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p>eins</p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p>zwei</p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p>drei</p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<?php display_latest_comments(); ?>
</div>
</div>Die Stellen mit „eins“, „zwei“, „drei“ ersetzt du mit eigenen Inhalten.
Auch so wie du es zuletzt geschrieben hast, kommt keine Anzeige in der Spalte 4, wo liegt bloß der Fehler? Eventuell im Bereich der
<?phpfunction display_latest_comment.. ?
Auf jeden Fall ein fettes Dankeschön für deine Hilfe.
Was soll das sein?
<?phpfunction display_latest_comment.. ?
In welcher Datei hast du das eingetragen?
Ich meine damit den Bereich, was du geschrieben hast…
<?php
function display_latest_comments() {
$latest_comments = get_latest_comments();
if (empty($latest_comments)) {
return;
}
$html = '<div class="latest-comments">';
foreach ($latest_comments as $comment) {
$html .= '<p>'
. $comment->comment_author
. ' zu '
. get_the_title($comment->comment_post_ID)
. '<br>'
. $comment->comment_content
. '</p>';
}
$html .= '</div>';
echo $html;
}
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
}Eingetragen in:
\wp-content\themes\newsup-pro\functions.php- Diese Antwort wurde geändert vor 2 Monaten, 3 Wochen von mvittel.
Ah, OK … aber wo hast du denn jetzt
<?php display_latest_comments(); ?>
untergebracht?
Ich würde folgendes empfehlen:
Bei dem o.g. Code am Ende noch folgendes zu ergänzen:
add_shortcode( 'latest_comments', 'display_latest_comments' );
Danach baust Du den Header um. Derzeit hast Du dort eine Tabelle aufgespannt. Nutze stattdessen lieber diesen Block: https://gutenberg-fibel.de/bloecke/spalten/ – erzeuge dort 4 Spalten und fülle jeweils die gewünschten Inhalte in die einzelnen Spalten. Hier kannst Du nun Blöcke innerhalb der Spalten verwenden, was die Verwaltung wesentlich einfacher macht.
Dort wo du die Kommentare anzeigen lassen willst, fügst Du einen Shortcode-Block ein: https://wordpress.org/documentation/article/shortcode-block/ – in den gibst Du dann folgendes ein:
[latest_comments]
Danach müsstest Du die letzten Kommentare in der rechten Spalte sehen können.
Ja, das war meine nächste Idee. Bisher war ich davon ausgegangen, dass der Code in einem Template platziert werden soll. Wenn das aber per Editor eingefügt wird, sollte die Variante mit Shortcode funktionieren. Einzige Änderung: in der Funktion
function display_latest_comments()
mussecho $html;
dann noch mitreturn $html;
ersetzt werden.Ich habe es wie folgt gemacht:
In der \wp-content\themes\newsup-pro\functions.php habe ich das Folgende eingetragen:/* Last Posts */
function display_latest_comments() {
$latest_comments = get_latest_comments();
if (empty($latest_comments)) {
return;
}
$html = '<div class="latest-comments">';
foreach ($latest_comments as $comment) {
$html .= '<p>'
. $comment->comment_author
. ' zu '
. get_the_title($comment->comment_post_ID)
. '<br>'
. $comment->comment_content
. '</p>';
}
$html .= '</div>';
return $html;
}
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
add_shortcode( 'latest_comments', 'display_latest_comments' );
}Auf der Testseite habe ich Shotcode-Block gesetzt mit dem Eintrag: [latest_comments]
Leider passiert nichts, ich weiß nicht, warum oder was ich falsch mache.<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><img class="" src="https://gdz.bplaced.net/Bilder/-projekte/Event.svg" width="25" height="25" /> <span style="color: #ff0000;"><strong>Live-Server:</strong></span><br /><strong><img src="https://gdz.bplaced.net/Bilder/Summer_icon.webp" alt="" /></strong><a href="https://www.gdz.bplaced.net/sommer-event-2024/" target="_blank" rel="noreferrer noopener">Sommer Event 2024</a><br />[ycd_countdown id=16917]<br /><img class="" src="https://www.gdz.bplaced.net/Bilder/Evente/2024/Care/globe.webp" alt="" width="25" height="25" /> <a href="https://www.gdz.bplaced.net/care-for-tomorrow-event-2024/" target="_blank" rel="noreferrer noopener">Care for Tomorrow Event</a> <em>(kommt als Nächstes)</em></p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><img style="width: 25px;" src="https://gdz.bplaced.net/Bilder/-projekte/Neu.svg" alt="" /> <span style="color: #ff0000;"><strong>Beta-Server:</strong></span><br /><img src="https://gdz.bplaced.net/Bilder/Fall_icon.webp" alt="" /> Herbst Event 2024 <em>(Kommt, Link folgt)</em><br /><strong><strong>⚠️</strong></strong><strong><strong> <span style="color: #ff0000;">Spoiler:</span> <br /></strong></strong><a href="https://www.gdz.bplaced.net/spoiler-neue-aenderungen-symbole/" target="_blank" rel="noreferrer noopener">Neue & Änderungen</a> (Vorschau auf Raumfahrt: Space Hub & Herbst-Event)</p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><img style="width: 25px;" src="https://gdz.bplaced.net/Bilder/-projekte/Sonstige.svg" alt="" /> <span style="color: #ff0000;"><strong>Website:</strong></span><br /><a href="https://www.gdz.bplaced.net/kontakt/" target="_blank" rel="noreferrer noopener">Suche Designer</a><br /><a href="https://www.gdz.bplaced.net/foe-bibel-unterstuetzen/">FoE-Bibel unterstützen</a><br /><img src="https://www.gdz.bplaced.net/Bilder/Symbole20/Fussball-Event.png" /> Am So. 14.07 um 21:00 Uhr Finale zwischen Spanien und England in der <a href="https://www.gdz.bplaced.net/fussball-europameisterschaft-2024/" target="_blank" rel="noopener">Fußball EuropaMeisterschaft 2024</a>.</p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><img style="width: 25px;" src="https://gdz.bplaced.net/Bilder/-projekte/Forum_Chat.svg" alt="" /> <span style="color: #ff0000;"><strong>Letzte Kommentare:</strong></span><br /><a href="https://www.gdz.bplaced.net/kommentare/" target="_blank" rel="noopener">Klick</a><br />Ich suche noch nach einer Lösung, alle Tests haben nicht geklappt.<br />[latest_comments]<br /></p>
</div>
</div>- Diese Antwort wurde geändert vor 2 Monaten, 3 Wochen von mvittel.
Statt
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
add_shortcode( 'latest_comments', 'display_latest_comments' );
}muss es richtig heißen
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
}
add_shortcode( 'latest_comments', 'display_latest_comments' );add_shortcode( 'latest_comments', 'display_latest_comments' );
darf also nicht in der Funktionget_latest_comments()
stehen.Ja das hat jetzt geklappt (Danke für die Geduld mit mir).
Nun müssen noch Änderungen gemacht werden:- Es sollen nur die letzten 3 Einträge angezeigt werden.
- Die Textlänge, was die Person geschrieben hat, sollte ca. 60 Zeichen haben.
- Nach zu kommt der Name der Seite, da fehlt die Verlinkung.
Danke vorab.
Zur Veranschaulichung der Länge und das, was ich meine, siehe auf meiner Testseite.- Diese Antwort wurde geändert vor 2 Monaten, 3 Wochen von mvittel.
Zu Punkt 1 ändere
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
],
];
return get_comments($args);
}zu
function get_latest_comments() {
$args = [
'date_query' => [
'after' => '4 weeks ago',
'before' => 'tomorrow',
'inclusive' => true,
'number' => 3
],
];
return get_comments($args);
}Zu Punkt 3 ändere
$comment->comment_content
zu
wp_trim_words( $comment->comment_content, 6 )
Letzteres schneidet den Text nach Wörtern ab, sieht meist besser aus statt eine Kürzung nach Zeichen.
Das mit der Verlinkung verstehe ich gerade noch nicht. Soll dorthin verlinkt werden, wo der Kommentar zu sehen ist? Also die Seite?
- Du musst angemeldet sein, um auf dieses Thema zu antworten.