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 15 Antworten - 1 bis 15 (von insgesamt 22)
  • Was wird denn als Fehlermeldung ausgegeben?

    … auch eventuell könnte ich Euch dann die Dateien dazu mailen.

    Was haben wir dann davon? Bitte lies Kannst du mich nicht anrufen oder mal schnell bei mir einloggen?

    Danke für die Antwort. Mir ist schon klar, dass man hier nicht umsonst einen Programmierer bekommt – das will ich auch gar nicht. Ich möchte nur verstehen, warum das Ganze nicht funktioniert – die anderen Felder in den Files habe ich auch modifiziert und es funktionierte alles. Es ist übrigens eine Test Plattform – also keine Live Seite.

    Das hier ist der Fehler:
    2020/02/12 15:54:44 [error] 84331#84331: *4442 FastCGI sent in stderr: „PHP message: PHP Warning: Creating default object from empty value in /www/bceedde_600/public/wp-content/themes/pro/bpro/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29“ while reading response header from upstream, client: 80.90.154.29, server: staging-bceedde.kinsta.cloud, request: „POST /wp-admin/admin-ajax.php HTTP/1.0“, upstream: „fastcgi://unix:/var/run/php7.4-fpm-bceedde.sock:“, host: „staging-bceedde.kinsta.cloud“, referrer: „https://staging-bceedde.kinsta.cloud/wp-admin/post.php?post=2404&action=edit&classic-editor&#8220;

    Ich kann aber in der betreffenden php auf zeile 29 und auch davor und danach keinerlei Zusammenhang feststellen zu dem jetzigen Fehler …

    Diese Fehlermeldung scheint mit der ursprünglichen Frage, wie die Sidebar mit ACF angepasst werden kann, nichts zu tun zu haben. Wird der Fehler auch gemeldet, wenn der ursprüngliche Code verwendet wird?

    Debugging ist aktiviert? Bei einem Entwicklungssystem dürfen die Fehler ja auch direkt ausgegeben werden.

    Der Fehler bleibt bestehen – das hat also mit dieser Redux Framework Geschichte etwas zu tun. Der Fehler hier, den ich beschreibe wird gar nicht im Error log in dem Sinne gezeigt.

    Ich habe den Debug Mode eingeschaltet …

    Jetzt ist der Fehler ein wenig anders dargestellt:

    2020/02/12 16:18:56 [error] 84333#84333: *4687 FastCGI sent in stderr: „PHP message: PHP Warning: Creating default object from empty value in /www/bceedde_600/public/wp-content/themes/pro/bpro/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29PHP message: PHP Parse error: syntax error, unexpected end of file in /www/bceedde_600/public/wp-content/themes/pro/includes/post-templates/entry-firmenevent.php on line 558“ while reading response header from upstream, client: 174.118.220.229, server: staging-bceedde.kinsta.cloud, request: „GET /firmenevent/oktoberfest/ HTTP/1.0“, upstream: „fastcgi://unix:/var/run/php7.4-fpm-bceedde.sock:“, host: „staging-bceedde.kinsta.cloud“, referrer: „https://staging-bceedde.kinsta.cloud/firmenevent/oktoberfest/&#8220;

    Der Fehler bleibt bestehen – das hat also mit dieser Redux Framework Geschichte etwas zu tun. Der Fehler hier, den ich beschreibe wird gar nicht im Error log in dem Sinne gezeigt.

    Genau das. 🙂

    Prüf mal in ACF den Feldnamen. Stimmt der wirklich?
    Dann mit

    $mein_feld = get_field( 'preis_vor_angebot_2' );
    var_dump( $mein_feld );

    den Inhalt des Felds prüfen.

    Wo und wie prüfe ich das? Sorry ich bin da leider ein wenig Anfänger – ich habe aktuell keinen WordPress Profi an der Hand, weshalb ich das selbst machen muss… Ich lerne aber sehr schnell 😀

    ACH ich bin ein Honk…

    Ich habe ein <?php endif; ?> vergessen :-DDDDDDDD

    Zwischen if und else war nur ein end if und da fehlte noch eines…

    Problem erledigt?
    Ich markieren den Thread mal als „gelöst“. 🙂

    Bego ich habe noch eine Frage. Ich habe es jetzt fehlerfrei hinbekommen. Allerdings gibt es hier einen „Blur“ Effekt, um den Alten Preis zu verwischen. Bislang wurde der aktuelle Preis in die nächste Zeile gepackt aber ich will ihn daneben stehen haben. Aktuell sehen beide aber „blurred“ aus. Was mache ich denn hier falsch?

    <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.> <span class="preis">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</span></div>

    Dieser Teil hier ist der, der verwaschen dastehen soll:

    <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.>

    Und dieser hier soll nicht verwaschen sein:

    <span class="preis">ab <span class="preise"><?php the_field('preis_klasse_1'); ?> €</span> p.P.</span>

    Wenn ich das Div Element schließe und erst danach den Span einfüge, ist der Teil in der nächsten Zeile erst zu sehen.

    Du hast ein <div class="… blur"> … </div>. Alles, was in diesem Tag steht, wird mit der CSS-Klasse .blur formatiert. Möchtest du nur einen Teil so formatieren, muss die Klasse eingeschränkt werden.

    Zum Beispiel

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

    Wobei … findest du das schön zu lesen? 🙂

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

    sieht vielleicht etwas übersichtlicher aus?

    Das ist top danke dir. Allerdings habe ich jetzt vorne anstehen 2x ein € Zeichen …

    Hier der Link: https://staging-bceedde.kinsta.cloud/firmenevent/oktoberfest/

    Bei mir sieht das so aus:
    Screenshot

    Irgendwie wird Fontawesome nicht so richtig geladen? Und beim Preis sollte irgendwo noch ein Zeilenumbruch reich. Aber das bekommst du selber hin. 😉

    Eine letzte Frage noch – ich habe das geschafft. Danke dir.

    Kann man mit dem Befehl:

    <?php the_field(‚Feldname‘); ?> auch mehrere Felder bekommen?

    Anstatt dem „ab“ möchte ich nämlich ein weiteres Feld namens „teilnehmer_1“ ansprechen, dass das dort steht.

    Klar, du kannst beliebig viele Felder ausgeben. Voraussetzung ist nur, dass sie in ACF erstellt wurden und danach auch im Beitrag/der Seite eingepflegt werden.

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 22)