Eine bestimmte Formatierung erst auf content ab einem bestimmten Datum anwenden

  • Ich bin - unter WP 5.1 und Theme Twenty Sixteen - mit diesem Blog:

    http://peter-nowak-journalist.de/

    beschäftigt.

    1. Ich hatte - nach entsprechender hiesiger Hilfe - folgenden code zu meinem child style sheet hinzugefügt, um eine bestimmte Formatierung aller ersten Absätze zu erreichen:

    Code
    .entry-content  p:first-of-type {
       font-size: 125%;
       font-style: italic;
       font-weight: 700;
       background-color: #D3D3D3;
       padding-left: 10px;
       padding-right: 10px;
    }

    und diesen code, um die Seiten von dieser Formatierung auszunehmen:

    Code
    .page p:first-of-type {
       font-size: 100%;
       font-style: normal;
       font-weight: normal;
       background-color: transparent;
       padding-left: 0;
       padding-right: 0;
    }

    2. Es blieben aber mehrere Probleme:

    a) Ich habe bisher nicht herausgefunden, wie ich auch Kalendereinträge von der fraglichen Formatierung ausnehmen kann.

    b) WordPress nimmt manchmal auch - im visuellen Modus per copy & paste eingefügten - Text mitten im Beitrag als scheinbaren ersten Absatz (siehe z.B. dort die Absätze, die eigentlich als Blockzitate in kleinerer Schrift und ohne Hintergrund formatiert sein sollen; vgl. auch die copy & paste-Quelle zu diesem Beitrag] wahr und formatiert diesen in der dort aber von mir nicht erwünschten Weise.

    3. Jetzt habe ich mir Folgendes überlegt, um diese Fehlformatierungen zumindest für neuen content zu vermeiden:

    a) Ich habe mit dem Plugin Advanced Custom Fields (ACF) u.a. ein neues Feld "Lead" für die Beitrags-Erstellung geschaffen.

    b) In meine content-single.php habe ich vor

    PHP
    <?php
               the_content();

    das Folgende eingefügt:

    PHP
    <div class="lead"><?php the_field( 'lead' ) ?></div>

    (Das gleiche würde ich auch noch in die content.php einfügen, falls der Rest so funktioniert, wie ich hoffe.)

    Außerdem habe ich in meine css.style eingefügt:

    Code
    .lead {
       font-size: 125%;
       font-style: italic;
       font-weight: 700;
       background-color: #D3D3D3;
       padding-left: 10px;
       padding-right: 10px;
    }

    c) Das Ergebnis sieht wie folgt aus:

    [Blockierte Grafik: http://peter-nowak-journalist.de/wp-content/uploads/2019/03/Lead.png]

    und

    [Blockierte Grafik: http://peter-nowak-journalist.de/wp-content/uploads/2019/03/beispiel.png]

    4. a) Ich würde jetzt gerne noch irgendwie und irgendwo definieren, daß meine Formatierung für

    Code
    .entry-content p:first-of-type

    nur Anwendung finden soll auf content von vor dem 01.03.2019 (also auf content, der kein ausgefülltes lead-Feld hat), sodaß also

    • in dem obigem Beispiel der zweite (= erste 'normale') Absatz in normaler Schrift dargestellt würde;
    • bei älterem content der erste ('normale') Absatz aber die fragliche Formatierung erhalten würde.

    Das heißt: Ich würde mir ersparen für die ca. 4.000 alten Beiträge das lead-Feld nachträglich auszufüllen; bei den alten Beiträgen die Fehlformatierung der Blockzitate hinnehmen; aber für die neuen Beiträge sicherstellen, daß das lead so formatiert ist, wie es sein soll, ohne daß dies aber (für den neuen content) die Formatierung der Blockzitate beeinträchtigt.

    Alternativ zu einer Datums-Bedingung käme auch in Betracht die

    Code
    .entry-content p:first-of-type

    Formatierung davon abhängig zu machen, daß das lead-Feld nicht ausgefüllt ist.

    5.
    Läßt sich eine solche Bedingung irgendwie formulieren? Und falls ja: Wie?

    Oder gibt es eine andere Lösung zur Vermeidung der Fehlformatierung der Blockzitate?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • bestimm einfach eine neue body-class in der header.php, wo du dann das Datum von der letzten Bearbeitung abfragst. Nur mal auf die schnelle, damit du weißt, was ich etwa meine:

    PHP
    <body <?php
    $old = "2019-03-01 01:00:00";
    if(($post->post_modified) < $old)  echo 'class="old"'; ?>>


    So hättest du im body jetzt (bei älteren Artikeln) eine neue class "old", die du entsprechend formatieren kannst:
    body.old .entry-content p:first-of-type

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • du hast jetzt einen 2. body Tag einfach in der content-single.php angelegt, das ist falsch. Du solltest den vorhandenen body tag anpassen.

    Wenn du unbedingt nur an die content-single.php willst, dann mach es lieber anders und setze das IF in einen schon vorhanden Div.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • du hast jetzt einen 2. body Tag einfach in der content-single.php angelegt, das ist falsch.

    Nee, was ich gemacht hatte, war: Deinen code in meine header.php einzufügen und in der css.style "body.old" davorzusetzen, sodaß dort jetzt heißt:

    Code
    body.old .entry-content  p:first-of-type {
       font-size: 125%;
       font-style: italic;
       font-weight: 700;
       background-color: #D3D3D3;
       padding-left: 10px;
       padding-right: 10px;
    }

    Aber daß ich irgendetwas falsch gemacht habe, habe ich auch gerade bemerkt, denn z.B. dieser alte Beitrag (letzte Änderung: 19. Februar) wird im ersten Absatz nicht so angezeigt wie er soll:

    http://peter-nowak-journalist.de/2019/02/05/sin…les-populisten/

    Zitat

    Du solltest den vorhandenen body tag anpassen.

    In welcher Datei denn und was ist ein body tag?

    Zitat

    Wenn du unbedingt nur an die content-single.php willst, ...

    Ich denke nicht, daß ich das unbedingt will.

  • in der header.php gibt es einen body Tag, den solltest du bearbeiten ... nicht einfach nur 1:1 meinen Code übernehmen.
    der body Tag könnte bei dir evtl. so aussehen

    PHP
    <body <?php body_class(); ?>>

    den dann bearbeiten:

    PHP
    <body <?php
    $old = "2019-03-01 01:00:00";
    if(($post->post_modified) < $old)  echo 'id="old" ';
    body_class(); ?>>

    Und da ich jetzt eine ID verwendet habe (statt einer class), dann folgendes CSS

    Code
    body#old .entry-content p:first-of-type

    Und tu dir einen Gefallen: wenn du das länger machen willst, lerne etwas HTML, CSS und PHP.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

    4 Mal editiert, zuletzt von maxe (1. März 2019 um 12:22)

  • Zu Letzterem: Mit "etwas" scheint es bei weitem nicht getan zu sein...; ohne "etwas" zu wissen, hätte ich nicht einmal eine Vorstellung, was möglich sein könnte und was für Fragen ich stellen muß. -

    Zum eigentlichen:

    1. Ich scheine es jetzt zu haben

    • sowohl dieser neue Artikel:


    http://peter-nowak-journalist.de/2019/03/01/ste…n-verdraengung/

    • als auch dieser alte Artikel:


    http://peter-nowak-journalist.de/2019/02/05/sin…les-populisten/

    sind jetzt im ersten Absatz so formatiert, wie sie formatiert sein sollen.


    2. Es hat aber reichlich gedauert, bis ich bemerkt hatte, daß in Deinem neuen code das Datum zunächst nicht mehr der 1.3., sondern der 5.2. war (die zwischenzeitliche Editierung habe ich erst unmittelbar vor dem Klick auf "Antwort erstellen" bemerkt) - weshalb ich mich gewundert hatte, warum z.B. der "Populisten"-Artikel vom 19. Februar zunächst nicht richtig formatiert war. Jetzt habe ich das Datum wieder auf den 1.3. geändert.

  • Nicht böse sein, aber das ist eine hässliche Lösung. Ihr braucht doch auf gar kein Datum abstellen sondern nur prüfen ob das Lead Feld nicht leer ist.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Es hat aber reichlich gedauert, bis ich bemerkt hatte, daß in Deinem neuen code das Datum zunächst nicht mehr der 1.3., sondern der 5.2. war


    Warum kopierst du auch immer nur stumpf die Codes hier? Das meinte ich mit

    lerne etwas HTML, CSS und PHP

    @mensmaximus Klar könnte man auch auf das Feld überprüfen, kommt aber doch letztendlich aufs selbe raus, wenn ab 1.3. strict das Feld befüllt wird.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Um im Body Tag eigene Klassen zu ergänzen, bietet sich auch der body_class Filter an.

    Generell sollte man auf dem offensichtlich noch rudimentären Wissenstand von WordPress, PHP, HTML und CSS für solche Art Experimente eher ein eigenes Testblog hernehmen, meinetwegen einen Klon des bestehenden Blogs lokal oder auf irgendeiner Subdomain mit Passwortschutz, aber bitte nicht weiter so unbedarft an dieser live Seite herumbasteln, denn das dürfte kaum im Sinne des Webseiteneigentümers sein.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!