Support » Allgemeine Fragen » Custom Post Typ mit eigenen Feldern in einer Page laden

  • Hallo zusammen,
    ich komme bei folgendem Problem nicht weiter …

    Ich habe eine normale Page in die wird mithilfe eines PHP-Script per random ein einzelner Post geladen (und zwar ein Custom Post) … das klappt wunderbar …

    Jeder Post hat über ein „eigenens Feld“ eine hintergrundfarbe definiert.

    Ich möchte nun, das dieser random Post auf meiner Page in ein div geladen wird, das diese hintergrundfarbe übernimmt….

    Hier der Code aus dem ganzen PHP-Script
    (das Script wird übrigens über einen Shortcode ganz normal in der Page geladen):

    <?php 
    remove_all_filters('posts_orderby'); 
    
    // Startseite
    if (is_front_page() ) {
    $args=array('post_type'=>'custom_type', 'custom_cat' => 'start', 'orderby'=>'rand', 'posts_per_page'=>'1'); 
    $custom_type=new WP_Query($args); 
    while ($custom_type->have_posts()) : $custom_type->the_post();
     ?>
    <div id="randomPost" style="background-color:<?php echo get_post_meta($post->ID,'hintergrundfarbe',true) ?>;">
    <span id="mapContainer">
    <?php the_content();?>
    </span>
    </div>
    <?php 
    endwhile; 
    wp_reset_postdata(); 
    }
    ?>

    Und hier die Stelle um die es geht …
    <div id="randomPost" style="background-color:<?php echo get_post_meta($post->ID,'hintergrundfarbe',true) ?>;">

    Erfolglos ausprobiert habe ich auch:
    <div id="randomPost" style="background-color:<?php echo get_post_meta($custom_type->ID,'hintergrundfarbe',true) ?>;">

    Wie gesagt, es klappt alles ganz wunderbar, bis auf die Übernahme der Inhalte aus dem eigenen Feld …

    Irgendwo hab ich da einen gewaltigen Denkfehler, nur wo?! Könnt ihr helfen?
    Kann ich denn überhaupt mit get_post_meta arbeiten?

    Bin noch nicht so bewandert mit den eigenen Feldern … 🙁
    Falls noch Infos fehlen liefere ich die gerne nach …

    besten Dank Gina

Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Wie heißt das Feld?
    Wie hast du es definiert?
    Was bekommst du für eine Ausgabe, wenn du das Feld abfragst?

    $hintergrundfarbe = get_post_meta( $post->ID,'hintergrundfarbe',true );
    var_dump( $hintergrundfarbe );

    Was passiert, wenn das Feld leer ist?
    Was passiert, wenn jemand das Feld statt mit einer Farbe mit JavaScript füllt?

    Thread-Starter websister

    (@websister)

    Hallo @pixolin und danke für die Rückmeldung,

    das Feld heißt ‚hintergrundfarbe‘

    Ich habe unter meinen Posts bei „eigenen Felder“ ein Feld Names hintergrundfarbe angelegt und vergebe dann jeweils für den Wert die Farbe.
    Also ich benutze die WP internen Felder und nicht ACF oder ähnliches …

    Bei deiner Abfrage oben kommt ein „bool(false)“ raus 🙁

    Was passiert, wenn das Feld leer ist?

    … meinst du das generell? Soweit bin ich nicht, vermutlich werde ich eine Standardfarbe definieren …

    Was passiert, wenn jemand das Feld statt mit einer Farbe mit JavaScript füllt?

    Die Frage verstehe ich nicht … 🙁 meinst du wegen der Sicherheit?

    Vielen vielen Dank schon mal …
    Gina

    Das Eingabefeld für „eigenen Felder“ hat den Nachteil, dass du laufend neue Felder erzeugen kannst. Mit etwas Pech hast du dann auch noch hintergundfarbe, hintergrundfrabe und hintergurndfarbe und wunderst dich, wieso die Feldwerte nicht übernomen werden. Besser ist es, wenn du eine Meta-Box erzeugst, also ein Eingabefeld, bei dem der Feldname bereits vorgegeben ist. Mehr Infos über Meta-Boxen findest du hier: https://developer.wordpress.org/plugins/metadata/custom-meta-boxes/

    Weil das ein wenig komplizierter zu programmieren ist, nutzen viele AnwenderInnen lieber ein Plugin wie Advanced Custom Fields, mit dem du Meta-Boxen mit wenigen Mausklicks erstellen kannst. Auch die Abfrage ist mit den ausgezeichnet dokumentierten Abfragefunktionen des Plugins wesentlich leichter. Vielleicht magst du sogar einen Farbwähler verwenden, was weniger fehleranfällig ist (background: blau; würde nicht funktionieren).
    Wenn dich die Anzeige von Advanced Custom Fields im Backend stört, kannst du das Plugin sogar nach Einrichten der Meta-Box verstecken, in dem du in deinem Plugin/Theme noch folgenden Filter hinzufügst: add_filter('acf/settings/show_admin', '__return_false');.

    Zum Debuggen deines Codes hast du var_dump( $hintergrundfarbe ); verwendet und erhältst die Aussage bool(false), die Variable hat also im Moment keinen Wert zugewiesen. Entweder stimmt der Feldname nicht (vielleicht ein Tippfehler? siehe oben) oder du hast zu diesem Feldnamen für diesen Beitrag keinen Wert eingetragen.

    Wenn das Feld bei der Eingabe/Bearbeitung des Beitrags leer gelassen wird, ergibt

    <div id="randomPost" 
      style="background-color:
        <?php echo get_post_meta($post->ID,'hintergrundfarbe',true); ?>">

    als Ausgabe

    <div id="randomPost" style="background-color: ">

    Wahrscheinlich wird der Browser diese Ausgabe ignorieren, der Code sieht dann nur unschön aus. Mit einem if-Statement könntest du aber die Ausgabe von style="background-color: " ganz unterdrücken, wenn das Feld keinen Wert enthält.

    Achte darauf, Ausgaben von Variablen immer zu escapen, um Sicherheitsprobleme zu vermeiden. Mit echo esc_attr( get_post_meta( $post->ID,'hintergrundfarbe',true ) ); wird eine Eingabe von <sript>alert("Buh!")</script> in Sonderzeichen umgewandelt & lt;script& gt;alert("Buh!)& lt;/script& gt;* und erzeugt dann vielleicht in der Ausgabe einen Fehler, kann aber keinen Schaden anrichten. Mehr Infos dazu findest du unter https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data.

    (* ich musste hier Leerschritte einfügen, weil die Zeichen sonst umgewandelt werden.)

    Thread-Starter websister

    (@websister)

    Super viele Dank für deine Ausführlichkeit … das werde ich alles durch testen und mich dann noch mal melden …

    Ich dachte mir irgendwie schon das die „eigenen Felder“ etwas tricky sind … dann werde ich vielleicht doch mit ACF arbeiten … ich dachte ich probier mal erst die rudimentäre Variante 😉

    Heute komme ich leider zu gar nix mehr, also nicht wundern wenn meine Rückmeldung etwas dauert …

    Viele Grüße und Danke!
    Gina

Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Das Thema „Custom Post Typ mit eigenen Feldern in einer Page laden“ ist für neue Antworten geschlossen.