Hallo Philipp,
wenn eine Seite (großteils) weiß bleibt, ist das gerne mal ein Problem mit der PHP-Syntax. Jetzt weiß ich nicht, wie fit du in PHP bist, aber der obige Code vom Theme ist ein bisschen gemein, weil er die PHP-Interpretation immer wieder startet (<?php
) und stoppt (?>
). Da schleicht sich schnell mal ein Fehler ein, wenn eine dieser Anweisungen zu viel oder zu wenig vorhanden ist.
Den obigen Code würde ich folgendermaßen umbauen:
<?php
if ( have_posts() ) {
// Hier den Code aus dem Blogpost einfügen
} else {
get_template_part( 'template-parts/posts/content','none');
}
?>
Viele Grüße,
Andreas
Hi Andreas,
vielen Dank für Deine Antwort!
In PHP bin ich leider nicht ganz so fit, ich versuch mir das zwar aktuell anzueignen bis das aber sitzt, dauert es vermutlich aber noch ein bisschen.
Ich habe den Code jetzt mal geändert, nun sieht er folgendermaßen aus:
<?php
if ( have_posts() ) {
if ( is_year() ) {
$shownYear = get_query_var( 'year' );
echo do_shortcode( '[einsatzliste jahr=' . esc_html( $shownYear ) . ' options=noHeading]' );
} else {
echo do_shortcode( '[einsatzliste options=noHeading]' );
}
} else {
get_template_part( 'template-parts/posts/content','none');
}
?>
Leider kommt dann auch bloß eine weiße Seite mit dem Text, genau wie vorher auch.
Testweise habe ich mal die Ordnerstruktur des Parent Themes im Child Theme nachgebaut und dort die Änderungen direkt in der archive.php gemacht, ohne den angehängten CPT. Mache ich das, funktioniert alles ohne Probleme und das Layout wird auch geladen. Allerdings sieht dann jedes Archiv so aus (Tabellenansicht), was natürlich nicht sein soll.
Leg ich die archive-einsatz.php in dem Ordner ab, in dem auch im Parent Theme die archive.php liegt, passiert gar nichts und das Archiv wird ganz normal geladen.
Hast Du noch eine Idee an was liegen könnte?
Viele Grüße
Philipp
Ah ok, das ist wieder so ein Theme, das es einem ein wenig schwerer macht :/ In dem Fall heißt die Datei dann nur archive.php, hat aber nicht die gleiche Aufgabe, da sie in einem Unterverzeichnis liegt.
Aber das lässt sich trotzdem lösen, ich schlage folgendes vor. Die Datei archive-einsatz.php im Child Theme wird nicht mehr benötigt. Dafür kopierst du die archive.php in das entsprechende Unterverzeichnis und zwar mit folgendem Inhalt:
<?php
if ( have_posts() ) {
if ( is_post_type_archive('einsatz') ) {
if ( is_year() ) {
$shownYear = get_query_var( 'year' );
echo do_shortcode( '[einsatzliste jahr=' . esc_html( $shownYear ) . ' options=noHeading]' );
} else {
echo do_shortcode( '[einsatzliste options=noHeading]' );
}
} else {
echo '<div id="post-list">';
/* Start the Loop */
while ( have_posts() ) {
the_post();
printf('<article id="post-%d" %s>', the_ID(), post_class());
printf('<div class="article-inner %s">', flatsome_blog_article_classes());
get_template_part('template-parts/posts/partials/entry-header', flatsome_option('blog_posts_header_style') );
get_template_part('template-parts/posts/content', 'default' );
get_template_part('template-parts/posts/partials/entry-footer', 'default' );
echo '</div></article>';
}
flatsome_posts_pagination();
echo '</div>';
}
} else {
get_template_part( 'template-parts/posts/content','none');
}
Jetzt wird diese archive.php sowohl für Einsatzberichte als auch alles andere verwendet, durch die Abfrage is_post_type_archive('einsatz')
wird aber jeweils etwas unterschiedliches ausgegeben.
P.S.: Das abschließende ?>
am Ende einer Datei sollte weggelassen werden, deshalb ist es hier auch nicht vorhanden.
Du bist mein Held!
Vielen, vielen Dank für Deine Unterstützung und den klasse Support, funktioniert einwandfrei!
Gruß
Philipp
Hi Andreas,
ich muss dich nochmal nerven. Mir ist gerade aufgefallen, dass sich nun in den anderen Archiven (Beitragsarchiv, Autorenarchiv, etc.) ein Fehler eingeschlichen hat.
Über jedem Beitrag im Archiv steht nun folgender Text:
681class="post-681 post type-post status-publish format-standard has-post-thumbnail hentry category-aktiver-dienst"
Dabei ändert sich natürlich immer die post-id, hast du eventuell eine Idee wie ich dieses Problem beheben könnte?
Gruß
Philipp
Oh stimmt, da habe ich einen Fehler gemacht.
Ersetze die Zeilen
printf('<article id="post-%d" %s>', the_ID(), post_class());
printf('<div class="article-inner %s">', flatsome_blog_article_classes());
mit
printf('<article id="post-%d" class="%s">', get_the_ID(), esc_attr(implode(' ', get_post_class())));
echo '<div class="article-inner ';
flatsome_blog_article_classes();
echo '">';
dann sollte es wieder passen.
Viele Grüße,
Andreas