Încărcare fișiere în metabox Wordpress pentru postări personalizate

2 iul. 2014, 13:07:45
Vizualizări: 20K
Voturi: 2

Sunt relativ nou în dezvoltarea WordPress și m-am blocat la această problemă. Am creat un tip de postare personalizată care apare în meniul de administrare. Am nevoie de un metabox în acesta cu un câmp pentru încărcarea fișierelor. Metabox-ul apare corect dar fișierul nu este salvat.

Folosesc următorul cod pentru aceasta. Orice ajutor ar fi foarte apreciat.

//////////////////Cele mai bune practici///////////////

add_action( 'init', 'wpb_register_cpt_best_practices' );

function wpb_register_cpt_best_practices() {

    $labels = array(
        'name' => _x( 'Cele mai bune practici', 'cele mai bune practici' ),
        'singular_name' => _x( 'Cea mai bună practică', 'cea mai bună practică' ),
        'add_new' => _x( 'Adaugă nou', 'cea mai bună practică' ),
        'add_new_item' => _x( 'Adaugă practică nouă', 'cea mai bună practică' ),
        'edit_item' => _x( 'Editează practica', 'cea mai bună practică' ),
        'new_item' => _x( 'Practică nouă', 'cea mai bună practică' ),
        'view_item' => _x( 'Vezi practica', 'cea mai bună practică' ),
        'search_items' => _x( 'Caută practici', 'cea mai bună practică' ),
        'not_found' => _x( 'Nu s-au găsit practici', 'cea mai bună practică' ),
        'not_found_in_trash' => _x( 'Nu s-au găsit practici în Coș', 'cea mai bună practică' ),
        'parent_item_colon' => _x( 'Practica părinte:', 'cea mai bună practică' ),
        'menu_name' => _x( 'Cele mai bune practici', 'cea mai bună practică' ),
    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => false,

        'supports' => array( 'title', 'editor',  'revisions' ),

        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,


        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'has_archive' => true,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );

    register_post_type( 'best practice', $args );
}
$key_bp = "best practice";
$meta_boxes_bp = array(

    "document" => array(
        "name" => "document",
        "title" => "Document Cele mai bune practici",
        "description" => "Atașează documentul cu cele mai bune practici.",
        "type" => "file")

);

function wpb_create_meta_box3() {
    global $key_bp;

    if( function_exists( 'add_meta_box' ) ) {
        add_meta_box( 'new-meta-boxes', ucfirst( $key_bp ) . ' Document', 'display_meta_box3', 'best practice', 'normal', 'high' );
    }
}

function display_meta_box3() {
    global $post, $meta_boxes_bp, $key_bp;
    ?>

    <div class="form-wrap">

        <?php
        wp_nonce_field( plugin_basename( __FILE__ ), $key_bp . '_wpnonce', false, true );

        foreach($meta_boxes_bp as $meta_box) {
            $data = get_post_meta($post->ID, $key_bp, true);
            ?>

            <div class="form-field form-required">
                <label for="<?php echo $meta_box[ 'name' ]; ?>"><?php echo $meta_box[ 'title' ]; ?></label>
                <input type="file" name="<?php echo $meta_box[ 'name' ]; ?>" value="<?php echo (isset($data[ $meta_box[ 'name' ] ]) ? $data[ $meta_box[ 'name' ] ]  : ''); ?>" />
                <p><?php echo $meta_box[ 'description' ]; ?>
                    <?php //print_r($data);
                    ?></p>
            </div>

        <?php } ?>

    </div>
<?php
}

function wpb_save_meta_box3( $post_id ) {
    global $post, $meta_boxes_bp, $key_bp;

    foreach( $meta_boxes_bp as $meta_box ) {
        if (isset($_POST[ $meta_box[ 'name' ] ])) {
            $data[ $meta_box[ 'name' ] ] = $_POST[ $meta_box[ 'name' ] ];
        }
    }

    if (!isset($_POST[ $key_bp . '_wpnonce' ]))
        return $post_id;

    if ( !wp_verify_nonce( $_POST[ $key_bp . '_wpnonce' ], plugin_basename(__FILE__) ) )
        return $post_id;

    if ( !current_user_can( 'edit_post', $post_id ))
        return $post_id;

    update_post_meta( $post_id, $key_bp, $data );
}

add_action( 'admin_menu', 'wpb_create_meta_box3' );
add_action( 'save_post', 'wpb_save_meta_box3' );
2
Comentarii

Te rugăm să folosești căutarea pentru a verifica dacă întrebarea ta a mai fost răspunsă înainte.

Nicolai Grossherr Nicolai Grossherr
2 iul. 2014 13:13:21

Nu văd că te ocupi deloc de fișier, cum ar fi cu $_FILES și altele. Aruncă o privire la acest răspuns pentru asta. S-ar putea să fie de fapt un candidat mai bun pentru întrebare duplicată.

Nicolai Grossherr Nicolai Grossherr
2 iul. 2014 13:24:07
Toate răspunsurile la întrebare 1
5

Pentru încărcarea fișierelor în metabox-uri în postări personalizate în WordPress, vă rugăm să consultați linkul de mai jos:

http://code.tutsplus.com/articles/attaching-files-to-your-posts-using-wordpress-custom-meta-boxes-part-1--wp-22291

sau puteți utiliza următoarele plugin-uri:

https://wordpress.org/plugins/simple-fields/
http://www.advancedcustomfields.com/

Ambele plugin-uri sunt excelente pentru câmpuri personalizate. De asemenea, puteți crea câmpuri repetabile.

2 iul. 2014 13:21:59
Comentarii

Vă rugăm să vă asigurați că răspunsul în sine poate rezolva problema. Răspunsurile care conțin doar link-uri sau sunt dominate de link-uri aproape niciodată nu reușesc să facă acest lucru. Cel mai bine este să adăugați codul relevant și explicația în răspuns.

Nicolai Grossherr Nicolai Grossherr
2 iul. 2014 13:29:26

Acest tip de răspunsuri este dăunător pentru site. Vă rugăm să vă îmbunătățiți răspunsurile

Pieter Goosen Pieter Goosen
2 iul. 2014 13:50:19

Am votat pozitiv. Nu ascultați de cei care spun că nu ar fi trebuit să răspundeți atât de prost. Răspunsul dumneavoastră ne-a ajutat ;) mulțumesc

T.Todua T.Todua
4 apr. 2020 14:18:53

destul de bine până când pagina legată se pierde!

André Kelling André Kelling
8 apr. 2022 14:56:55

Nu a funcționat pentru mine, a trebuit să adaug encytype="multipart/form-data" la formularul edit.php folosind răspunsul acceptat aici: https://stackoverflow.com/questions/46409457/files-consistently-empty-in-wordpress-post-meta-upload-box

Chad Reitsma Chad Reitsma
26 iun. 2023 02:40:28