Support » Plugins » Mehrere Meta Boxen in Custom Post Type speichern

  • Ich möchte gern ein eigenes kleines einfaches Galerie-Plugin programmieren. Ich weiss, das es zahlreiche gibt, aber ich hab Spaß an der Sache 🙂 Ich habe diesem zwei Meta-Boxes für eigene Felder hinzugefügt. Eins für die Beschreibung der Galerie und eins für die Bilder, die über den integrierten MediaUploader hinzugefügt werden sollen. Die Galeriebeschreibung lässt sich mit dem Code speichern. Mein Problem ist jetzt, das ich auch gerne die/das Bild speichern möchte, was ich über den Media-Uploader hinzugefügt habe. Kann ich das in der einen gleichen Funktion machen, wo ich auch die Galerie Beschreibung speichere oder muss ich dazu ne extra Funktion machen? Und wie stelle ich mich an? Hier ist mein Code:

    <?php
    /*
    Plugin Name: custom post type modern
    Plugin URI: http://modern-war-jetzt.net
    Description: custom post types for modern-war-jetzt.net
    Version: 1.0
    Author: techtalk 3000
    Author URI: http://techtalk3000.de/
    */
    add_action('init', 'add_galerien_type');
    
    function add_galerien_type(){
    
        global $wp_rewrite;
    
        $labels = array(
            'name' => _x('Galerien', 'post type general name'),
            'singular_name' => _x('Galerie', 'post type singular name'),
            'add_new' => _x('Neue Galerie', 'Post'),
            'add_new_item' => __('Neue Galerie hinzufügen'),
            'edit_item' => __('Galerie bearbeiten'),
            'new_item' => __('Neue Galerie'),
            'view_item' => __('Galerie zeigen'),
            'search_items' => __('Galerien durchsuchen'),
            'not_found' => __('Keine Galerien gefunden'),
            'not_found_in_trash' => __('Keine Galerien im Papierkorb gefunden'),
            'parent_item_colon' => “
        );
    
        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'query_var' => true,
            'rewrite' => false,
            'capability_type' => 'post',
            'has_archive' => false,
            'hierarchical' => false,
            'menu_position' => 5,
            'supports' => array('title', 'thumbnail'),
            'has_archive' => true
        );
    
        register_post_type('galerien', $args);
    }
    add_action( 'add_meta_boxes', 'galerie_add_custom_box' );
    add_action( 'save_post', 'galerie_save_postdata' );
    
    function galerie_add_custom_box() {
        add_meta_box(
            'galerie_beschreibung',
            'Kurze Beschreibung zum Inhalt der Galerie',
            'galerie_beschreibung_custom_box',
            'galerien',
            'normal',
            'high'
        );
        add_meta_box (
            'galerie_bilder',
            'Bilder zur Galerie hinzufügen',
            'galerie_bilder_custom_box',
            'galerien',
            'normal'
        );
    }
    
    function galerie_beschreibung_custom_box( $post ) {
        wp_nonce_field( plugin_basename( __FILE__ ), 'galerie_noncename' );
    
        $galerie_beschreibung_custom_box_stored = get_post_meta($post->ID );
        ?>
    
        <p>
        <textarea name=“meta-galerie-beschreibung“ id=“meta-galerie-beschreibung“ style=“width: 100%“ rows=“5″><?php if ( isset ( $galerie_beschreibung_custom_box_stored['meta-galerie-beschreibung'] ) ) echo $galerie_beschreibung_custom_box_stored['meta-galerie-beschreibung'][0]; ?></textarea>
        </p>
    
        <?php
    
    }
    
    function galerie_bilder_custom_box () {
    
        $image_src = “;
    
        $image_id = get_post_meta( $post->ID, '_image_id', true );
        $image_src = wp_get_attachment_url( $image_id );
    
        ?>
        “ style=“max-width:100%;“ />
        <input type=“hidden“ name=“upload_image_id“ id=“upload_image_id“ value=“<?php echo $image_id; ?>“ />
        <p>
        “ href=“#“ id=“hinzufuegen-galerie-bild“><?php _e( 'Bild hinzufügen' ) ?>
        “ href=“#“ id=“entferne-galerie-bild“ style=“<?php echo ( ! $image_id ? 'display:none;' : “ ); ?>“><?php _e( 'Bild entfernen' ) ?>
        </p>
    
        <script type=“text/javascript“>
        jQuery(document).ready(function($) {
    
        window.send_to_editor_default = window.send_to_editor;
    
        $('#hinzufuegen-galerie-bild').click(function(){
    
        window.send_to_editor = window.attach_image;
        tb_show(“, 'media-upload.php?post_id=<?php echo $post->ID ?>&type=image&TB_iframe=true');
    
        return false;
        });
    
        $('#entferne-galerie-bild').click(function() {
    
        $('#upload_image_id').val(“);
        $('img').attr('src', “);
        $(this).hide();
    
        return false;
        });
    
        window.attach_image = function(html) {
    
        $('body').append('<div id=“temp_image“>' + html + '</div>');
    
        var img = $('#temp_image').find('img');
    
        imgurl = img.attr('src');
        imgclass = img.attr('class');
        imgid = parseInt(imgclass.replace(/\D/g, “), 10);
    
        $('#upload_image_id').val(imgid);
        $('#entferne-galerie-bild').show();
    
        $('img#galerie_bild').attr('src', imgurl);
        try{tb_remove();}catch(e){};
        $('#temp_image').remove();
    
        window.send_to_editor = window.send_to_editor_default;
    
        }
    
        });
        </script>
        <?php
    }
    
    function galerie_save_postdata( $post_id ) {
    
        $is_autosave = wp_is_post_autosave( $post_id );
        $is_revision = wp_is_post_revision( $post_id );
        $is_valid_nonce = ( isset( $_POST[ 'galerie_noncename' ] ) && wp_verify_nonce( $_POST[ 'galerie_noncename' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
    
        if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
        }
    
        if( isset( $_POST[ 'meta-galerie-beschreibung' ] ) ) {
            update_post_meta( $post_id, 'meta-galerie-beschreibung', sanitize_text_field( $_POST[ 'meta-galerie-beschreibung' ] ) );
        }
    }
    ?>

    Moderationshinweis: Code-Auszeichnung korrigiert. Grüße, Bego

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Hallo @techtalk3000,

    auch wenn ich die Code-Auszeichnung in deinem Beitrag gerade korrigiert habe, ist der Code ohne Syntax-Highlighting schlecht nachvollziehbar.

    Für solche Diskussionen ist es deutlich besser, wenn du deinen Code auf GitHub veröffentlichst. Der Code ist dann nicht nur übersichtlicher, sondern es ist auch einfacher, Änderungen hinzuzufügen oder Anmerkungen zu schreiben. Die Nutzung von GitHub ist für öffentlich zugänglichen Code und OpenSource-Projekte wie WordPress kostenlos.

    Wenn du dich mit GitHub noch nicht auskennst (dies ist dein erster Thread und wir kennen deinen Wissensstand nicht), kannst du dir ein sehr gut gemachtes Tutorial anschauen: In 15 Minuten bist du durch. Oder vielleicht in 20. Es lohnt sich!

    Für die Einbindung von JavaScript solltest du übrigens wp_enqueue_script() verwenden, um Konflikte zu vermeiden.

    Thread-Starter techtalk3000

    (@techtalk3000)

    Vielen Dank für den Tipp. Hatte es schon bei GitHub hichgeladen, deswegen geht es schnell (auch wenn ich mich mit Git Hub noch garnicht auskenne). Ist der Link so richtig:

    https://github.com/klangsucht/gallery_plugin_wp/blob/master/gallery_plugin_file.php

    Danke und viele Grüße!

    Im Grunde reicht es, wenn du den Link zu deinem Repo mitteilst:
    https://github.com/klangsucht/gallery_plugin_wp

    Bei deinem Repo gibt es eine ganze Reihe von Dingen, die korrigiert werden sollten. Ich fange mal mit dem Custom Post Type an, aber wie gesagt sprengt das hier für einen Anwender-Support ein wenig den Rahmen.

    Thread-Starter techtalk3000

    (@techtalk3000)

    Ok. Alles klar. Vielen Dank auf jeden Fall für die Hilfe! Hast Du vielleicht Tipps, wo ich mich besser mit solchen Fragen hinwenden sollte?

    Hab die Frage jetzt auch einfach mal hier eingestellt: http://wordpress.stackexchange.com/

    Vielen Dank auf jeden Fall für den Support 🙂

    Ich hab dir ja jetzt auf GitHub schon ein wenig zu deinem Plugin geschrieben. Aber – ganz ehrlich … ich würde erst einmal mit einfacheren Dingen anfangen.

    Ich bin gespannt, welche Antworten du auf Stackexchange bekommst.

    Falls sich sonst noch jemand an der Diskussion beteiligen möchte:
    https://wordpress.stackexchange.com/questions/246802/store-multiple-meta-boxes-to-custom-post-type

    (Crossposting)

    • Diese Antwort wurde geändert vor 7 Jahren, 5 Monaten von Bego Mario Garde. Grund: Crossposting
    Thread-Starter techtalk3000

    (@techtalk3000)

    Vielen Dank schonmal für die Hilfe. Bisher gab es noch nicht viele Rückmeldungen bei Stackexchange. Ist wahrscheinlich auch einfach zu viel. Ich werde an dem Projekt dranbleiben, aber für die Website, die ich gerade für einen Freund mache, wohl erstmal auf ein Plugin zurückgreifen. Auf jeden Fall hilft der Tipp mit dem Repeater weiter! Du hattest noch was geschrieben zu einem guten Tutorial zu GitHub – kannst Du mir da vielleicht nochmal einen Link geben?

    Vielen, vielen Dank auf jeden Fall für den Support. Tut gut mal einen anderen Blick zu bekommen 😉

    Ups, ich wollte eigentlich in dem Beitrag oben den Link zum Tutorial hinzufügen. Hier ist er:

    https://try.github.io/levels/1/challenges/1

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Das Thema „Mehrere Meta Boxen in Custom Post Type speichern“ ist für neue Antworten geschlossen.