Support » Installation » custom post type sidebar anpassen mit advanced custom fields

  • Gelöst morpheus200k

    (@morpheus200k)


    Hallo zusammen,

    ich habe eine WordPress Website, welche mit verschiedenen Post Types unsere Angebote darstellt. Es handelt sich um Eventprodukte bzw. Dienstleistungen – es sind also Produktseiten.
    Diese Produktseiten verfügen über ein Sidebar Element, das mittels einer „posttype-entry.php“ mit Infos zum Ablauf und Preis gefüllt wird. Die Füllung wird mittels des Plugins „Advanced Custom Fields“ erreicht.

    Standardmäßig wird die Produktseite mit einem Preis und / oder einem Sonderpreis dargestellt. Die Preise können im Backend entsprechend eingegeben werden. Die entsprechenden Felder heißen:

    preis_vor_angebot und preisklasse_1

    Dazu gibt es noch eine „posttype-header.php, die die klassen blur und preise regelt.

    Was wollte ich nun machen?

    Ich wollte zwei weitere Preise konfigurieren, habe auch weitere Felder angelegt im Plugin und alles soweit in die PHP eingegeben – dennnoch wirft WordPress mir einen Fehler vor. Ich würde mich freuen, wenn mir jemand dazu die Augen öffnen kann.

    Die zusätzlichen Felder heißen dementsprechend:

    preis_vor_angebot_2 und preisklasse_2

    Hier die Codezeilen im originalen Zustand (ich habe die übrigen 1.000 Zeilen weggelassen):

    Original Code-Teil der php Datei:

     <?php if ( get_field( 'preis_vor_angebot' ) ): ?>
    
                                    <div class="vc_acf preis vc_txt_align_left blur">ab <span class="preise <?php if( get_field('preis_vor_angebot') ): ?>streich<?php endif; ?>"><?php the_field('preis_vor_angebot'); ?> €</span> p.P.</div>
    
                                    <div class="vc_acf vc_txt_align_left" style="background: #f2f0f0;padding: 12px 10px 8px;margin-bottom: 12px;font-size: 14px;font-weight: 600;font-family: 'Open Sans';margin-top: 16px;">Deal:<br>
                                    <span class="preis">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</span></div>
    
                                    <?php else: ?>
    
                                    <?php if( get_field('preis_klasse_1') ): ?>
                                      <div class="vc_acf preis vc_txt_align_left">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</div>
                                    <?php endif; ?>
    <?php endif; // end of if field_name logic ?>

    Nun der modifizierte Code-Teil der php Datei:

     <?php if ( get_field( 'preis_vor_angebot' ) ): ?>
    
                                    <div class="vc_acf preis vc_txt_align_left blur">ab <span class="preise <?php if( get_field('preis_vor_angebot') ): ?>streich<?php endif; ?>"><?php the_field('preis_vor_angebot'); ?> €</span> p.P.</div>
    
                                    <div class="vc_acf vc_txt_align_left" style="background: #f2f0f0;padding: 12px 10px 8px;margin-bottom: 12px;font-size: 14px;font-weight: 600;font-family: 'Open Sans';margin-top: 16px;">Deal:<br>
                                    <span class="preis">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</span></div>
    
                                    <?php else: ?>
    
                                    <?php if( get_field('preis_klasse_1') ): ?>
                                      <div class="vc_acf preis vc_txt_align_left">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</div>
                                    <?php endif; ?>
    
                                    <?php if ( get_field( 'preis_vor_angebot_2' ) ): ?>
    
                                    <div class="vc_acf preis vc_txt_align_left blur">ab <span class="preise <?php if( get_field('preis_vor_angebot_2') ): ?>streich<?php endif; ?>"><?php the_field('preis_vor_angebot_2'); ?> €</span> p.P.</div>
    
                                    <div class="vc_acf vc_txt_align_left" style="background: #f2f0f0;padding: 12px 10px 8px;margin-bottom: 12px;font-size: 14px;font-weight: 600;font-family: 'Open Sans';margin-top: 16px;">Deal:<br>
                                    <span class="preis">ab <span class="preise"><?php the_field('preis_klasse_2'); ?> €</span> p.P.</span></div>
    
                                    <?php else: ?>
    
                                    <?php if( get_field('preis_klasse_2') ): ?>
                                      <div class="vc_acf preis vc_txt_align_left">ab <span class="preise"><?php the_field('preis_klasse_2'); ?> €</span> p.P.</div>
                                    <?php endif; ?>
    
                                    <?php endif; // end of if field_name logic ?>

    Dazu gibt es wie o.g. die zugehörige header datei dieses post types, z.B. „posttype-header.php“ genannt. In dieser war original dieser Eintrag:

    <?php if( get_field('preis_vor_angebot') ): ?>
    <style>.streich { position: relative;color: #b4b4b4;}
    .streich::after {
      content: "";
      display: block;
      position: absolute;
      bottom: 16px;
      left: 0;
      transform: skewY(-5deg);
      width: 100%;
      height: 3px;
      background: #b95858;
    }

    Und ich habe entsprechend des weiteren custom fields diesen hinzugefügt:

    <?php if( get_field('preis_vor_angebot_2') ): ?>
    <style>.streich { position: relative;color: #b4b4b4;}
    .streich::after {
      content: "";
      display: block;
      position: absolute;
      bottom: 16px;
      left: 0;
      transform: skewY(-5deg);
      width: 100%;
      height: 3px;
      background: #b95858;
    }

    Ich würde mich sehr freuen, wenn mir jemand helfen könnte – auch eventuell könnte ich Euch dann die Dateien dazu mailen.

    Freue mich auf Eure Hilfe.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 7 Antworten - 16 bis 22 (von insgesamt 22)
  • Ach sorry ich meinte folgendes:

    Mit dem Befehl:

    <?php if ( get_field( ‚preis_vor_angebot‘ ) ): ?> kann ich ja dann wie gehabt arbeiten. aber was ist, wenn ich noch dieses Feld in die bisherige Konfiguration einbinden will:

    <?php if ( get_field( ‚teilnehmer_1‘ ) ): ?>

    ?

    Der Code ist derselbe wie vorhin. Anstatt dem „ab“ wird jetzt das Feld Teilnehmer_1 eingeblendet.

    Frage: mit get_field kann ich auch mehrere in der Klammer einfügen?

    Das kannst du nach Belieben kombinieren.
    Die if-Statements sollten nur irgendwie Sinn machen.

    Mit

    <?php 
    if ( get_field( 'was_auch_immer' ) ) {
      the_field( 'was_auch_immer' );
    }

    prüfst du zunächst, ob das Feld auch ausgefüllt wurde, weil sonst im nächsten Schritt eine Fehlermeldung ausgegeben wird.

    Hast du dir die Dokumentation von ACF mal angeschaut? Da gibt es richtig gute Beispiele.

    Ja danke dir. Das Problem ist, dass ich ja alles innerhalb des gleichen Div Containers habe.

    Ich finde auch zum verrecken nicht die Klasse vc_acf.

    Ich versuche es mal ein wenig …

    Ich kriege es leider nicht hin – eventuell hast du ja später noch einmal kurz Zeit, um da drüber zu schauen. Das Feld, was ich vor den Preis setzen will heißt bei ACF ‚teilnehmer_1‘. Ich will es hinter das € Zeichen setzen aber vor den Preis – quasi an Stelle von dem „ab“. Irgendwas muss ich wohl übersehen, oder?

      <?php if ( get_field( 'preis_vor_angebot') ): ?>
    <div class="vc_acf preis vc_txt_align_left"><?php the_field('teilnehmer_1'); ?><?php the_field('preis_klasse_1'); ?> €</span><span class="blur">
    <span class="preise <?php if( get_field('preis_vor_angebot') ): ?>streich<?php endif; ?>"><?php the_field('preis_vor_angebot'); ?> €</span>>
    </div>

    Das Feld ist im Backend mit 15x befüllt, wird hier aber nicht angezeigt.

    Hi @pixolin Bego,
    ich habe nun noch ein ganz anderes Problem, denn eine Sache habe ich vergessen.

    Wenn kein „Sonderpreis“ verfügbar ist und wir nur normale Preise aufrufen, dann habe ich noch die „else“ Funktion, die aber mit deinem Code scheinbar nicht arbeiten will. Auch wenn ich den Sonderpreis entferne und alles normal ist, bleibt er stehen – was aber irgendwie komisch ist.

    So sieht jetzt der ganze Code aus:

    	  <?php if ( get_field( 'preis_vor_angebot' ) ): ?>
    
                                    <?php
    $class = '';
    if( get_field('preis_vor_angebot') ) {
     $class = 'streich';
    }
    ?>
    <div class="vc_acf preis vc_txt_align_left">
      <span class="preise">
      <?php the_field('teilnehmer_1'); ?>
        <?php the_field('preis_klasse_1'); ?> €
      </span> p.P.
    </span>
    <span class="blur">
    ab
    <span class="preise <?php echo $class; ?>">
      <?php the_field('preis_vor_angebot'); ?> €</span> p.P.
    </span>
    
    </div>
    
                                    <?php else: ?>
    
                                    <?php if( get_field('preis_klasse_1') ): ?>
    								  <div class="vc_acf preis vc_txt_align_left"><p><?php the_field('teilnehmer_1'); ?></p><span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</div>
    								<?php endif; ?>
    								<?php endif; ?>

    Was ist denn hierbei jetzt falsch?

    Hallo,
    auch wenn ich mich jetzt nicht mit der Problematik mangels Erfahrungen mit ACF beschäftigt habe, scheint mir der Code etwas seltsam:

    • Die If-Schleife ist abgeschlossen, danach kommen einige HTML-Tags, etc. und dann kommt <?php else: ?>. Insofern hängt der Else-Zweig in der Luft und macht an dieser Stelle meiner Meinung nach gar keinen Sinn.
    • Außerdem sehe ich da einige seltsame Zeichen im Code: €. Das scheinen irgendwelche Zeichen für Zeilenumbruch zu sein. Solche Zeichen habe ich bei den von mir verwendeten Editoren Atom, Notepad++ und PsPad bis dato nie gesehen. Könnte aber auch am Import aus deinem Editor „passiert“ sein.

    Viele Grüße
    Hans-Gerd

    Guten Morgen,
    ich habe das Problem lösen können – vielen Dank für die Mithilfe :-). Es ist alles ein wenig komplexer als gedacht. Nun muss ich noch irgendwie eine Klasse finden, die nicht einmal im string locator gefunden werden kann – nämlich die mit dem Streichpreis …

Ansicht von 7 Antworten - 16 bis 22 (von insgesamt 22)