Feste Werte für "Benutzerdefinierte Felder" hinterlegen

  • Hi Leute

    Ich möchte für jeden Artikel ein "Benutzerdefiniertes Feld" hinterlegen. Ist soweit auch schnell realisiert, nun aber kommt der Knackpunkt.

    Beispielerklärung:
    Ich nenne das Feld jetzt "artikelbild".
    Als Wert nehme ich zB "Apfel"

    Jetzt soll dort aber nicht einfach nur "Apfel" ausgegeben werden sondern hinter dem Wert "Apfel" soll ein Bild hinterlegt werden von einem "Apfel".

    Ich habe jetzt ca. 1500 Bilder die alle hochgeladen werden in einen bestimmten Ordner und alle sollen mit einem bestimmten Begriff abgerufen werden.

    Wie setze ich dies am besten um, das ich nicht jedesmal die Bild-URL eintragen muss sondern bloss einen Wert der einem bestimmten Bild zugeordnet wurde eintrage?

    Ich weiss das man dies im Theme mit "if"-abfragen umsetzen kann, aber bei 1500 Bildern, ein bisschen heftig oder?

    • 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

  • 1500 Benutzerdefinierte Felder sind ja auch eine ganze Menge

    Hätte da vielleicht eine Idee, die dir auch gefallen könnte.

    hab da mal ein Tutorial geschrieben, zum automatischen verlinken von Wörtern im Artikel, über ein angepasstes Acronym-Plugin

    das ließe sich auch einfach auf die Bilder anwenden

    Im Admin des Plugins fügst du dann z.B. deinen Apfel ein( damit nicht jeder Apfel umgewandelt wird mit Zusatzzeichen)

    -Apfel- und die Bild Url dazu

    dadurch wird dann im Artikel aus [COLOR="#FF0000"]-Apfel-[/COLOR] dein Bild

    die Änderung im Plugin wäre dann

    statt

    Code
    $text = preg_replace( "|(?!<[^<>]*?)(?<![?.&])\b$acronym\b(?!:)(?![^<>]*?>)|msU", "<a href=\"$fulltext\">$acronym</a>" , $text );


    dies

    Code
    $text = preg_replace( "|(?!<[^<>]*?)(?<![?.&])\b$acronym\b(?!:)(?![^<>]*?>)|msU", "<img src=\"$fulltext\">" , $text );

    Einmal editiert, zuletzt von Tutrix (29. August 2012 um 16:22)

  • Tut der dann aber nicht aus jedem Wort "Apfel" das im Text vorkommt ein Bild generieren?

    Ich habe mir mal das Plugin Magic Fields 2 installiert. Das würde im Grunde schon perfekt sein, wenn man dort als DropDown-Liste das Wort "Apfel" auswählt und daraus dann ein Bild generiert wird. Nur leider ist das nicht vorgesehen bisher. :-(

  • Wenn ich das Wort -Apfel- direkt in den Text händisch eintrage wird es wunderbar umgewandelt

    Nun mehr macht das Acronym auch nicht

    Wenn du "-Apfel-" erst noch über ein B-Feld generieren lässt, greift die replace Funktion wohl nicht.

    kannst dir ja mal dies Insert Html Snippet anschauen
    wobei vermutlich egal welches Plugin du verwendest, jedes an seine Grenzen stößt, bei einer Dropdown-Liste mit 1500 Optionen ;-)

  • Eine einfache Lösung wäre, den Wert mit dem entsprechenden Namen der Bilder zu versehen.
    Beispiel wenn alle Bilder die Endung "jpg" haben.

    PHP
    <?php if ( get_post_meta($post->ID, 'artikelbild', true) ) { ?>    
        <img class="artikelbild" src="wp-content/uploads/<?php echo get_post_meta($post->ID, 'artikelbild', true) ?>.jpg"/>    
    <?php } ?>

    Eine andere Möglichkeit wäre, in einer separaten Datei, die Bilder in ein Array definieren.
    artikelbilder.php:

    PHP
    <?php
    $artikelbild = array(
        'apfel'=>'wp-content/uploads/mein-apfel.jpg',
        'birne'=>'wp-content/uploads/birnen.png',
        'banane'=>'wp-content/uploads/ban.gif');
    ?>

    Benutzerdefiniertes Feld:

    PHP
    <?php
    if ( get_post_meta($post->ID, 'artikelbild', true) ) {    
        get_template_part( 'artikelbilder' );
        $wert = get_post_meta($post->ID, 'artikelbild', true);
        $bild = $artikelbild[$wert];
    ?>
        <img class="artikelbild" src="<?php echo $bild ?>"/>    
    <?php } ?>
  • Hi Scotti

    Das ist eigentlich schon genau das was ich gesucht habe, allerdings will das noch nicht so wie ich will :-/

    Hier ein Screenshot eines Artikels wo ich es genauso gemacht habe wie du beschrieben hast:

    Wie man sieht wird nur ein kleines Kästchen angezeigt. Wenn ich mit der Maus darüber fahre sehe ich das nur die Permalink-URL zum aktuellen Artikel angezeigt wird, aber kein Verweis auf den hinterlegten Array in der artikelbilder.php

    Habe ich etwas vergessen?

  • "get_template_part" funktioniert nicht überall.

    Du kannst "require" verwenden.

    PHP
    <?php
    if ( get_post_meta($post->ID, 'artikelbild', true) ) {    
        require_once TEMPLATEPATH . '/artikelbilder.php';
        $wert = get_post_meta($post->ID, 'artikelbild', true);
        $bild = $artikelbild[$wert];
    ?>
        <img class="artikelbild" src="<?php echo $bild ?>"/>    
    <?php } ?>

    In Child-Themes muss eventuell "STYLESHEETPATH" verwendet werden.

  • In meinem Beispiel befindet sich die "artikelbilder.php" im Hauptverzeichnis des Themes.

    Überprüfe die Links in der artikelbilder.php, ob sie auch mit dem Verzeichnis auf dem Server übereinstimmen.
    Bei uploads meist "wp-content/uploads/2012/08/mein-bild.jpg"

  • Beim Hochladen der Bilder werden die Dateien im Uploadverzeichnis in Unterverzeichnissen abgelegt.
    uploads -> Jahr -> Monat
    Beispiel, gespeichert im August:
    wp-content/uploads/2012/08/bild.jpg

Jetzt mitmachen!

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