Imagine încărcată nu apare în tipul de postare personalizat
Scriu un plugin care ar trebui să permită utilizatorilor să creeze un tip de postare personalizat numit reseller și să atașeze o imagine. Imaginea este încărcată în folderul uploads și apare în biblioteca de media cu un thumbnail gol. Imaginea nu este vizibilă nici în lista de 'resellers' din interfața de administrare pentru tipul de postare personalizat.
Poate cineva să vadă ce am omis? Funcțiile relevante încep de la linia 362 aici:
https://gist.github.com/codecowboy/80fd6363c58558a74c9e
Secțiunea relevantă:
public function wps_reseller_cpt() {
$labels = array(
'name' => _x( 'WPS Resellers', 'post type general name' ),
'singular_name' => _x( 'WPS Reseller', 'post type singular name' ),
'add_new' => _x( 'Add New', 'book' ),
'add_new_item' => __( 'Add New Reseller' ),
'edit_item' => __( 'Edit Reseller' ),
'new_item' => __( 'New Reseller' ),
'all_items' => __( 'All Resellers' ),
'view_item' => __( 'View Reseller' ),
'search_items' => __( 'Search Resellers' ),
'not_found' => __( 'No resellers found' ),
'not_found_in_trash' => __( 'No Reseller found in the Trash' ),
'parent_item_colon' => '',
'menu_name' => 'Resellers'
);
$args = array(
'labels' => $labels,
'description' => 'Conține datele despre reselleri și reselleri specifici',
'public' => true,
'menu_position' => 50,
'supports' => array( 'title', 'editor','image', 'thumbnail', 'custom-fields' ),
'has_archive' => false,
);
register_post_type( 'wps-reseller', $args );
}
public function create_reseller_profile_form(){
require_once plugin_dir_path( __FILE__ ) . 'views/public-create_reseller_profile_form.php';
}
public function intercept_reseller_profile_form() {
if ( !empty( $_POST['wps-reseller-user-submission'] ) ) {
$this->wps_reseller_process_form();
} else {
return $template;
}
}
public function wps_reseller_process_form() {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if ( wp_verify_nonce( $_POST['reseller_user_form'], 'add_reseller_form') &&
!empty( $_POST['reseller-title'] ) &&
!empty( $_POST['reseller-description'] ) &&
!empty( $_FILES['reseller-image']) )
{
$file = $_FILES['reseller-image'];
$uploads = wp_upload_dir();
$new_reseller_profile_data = array(
'post_status' => 'draft',
'post_title' => $_POST['reseller-title'],
'post_content' => $_POST['reseller-description'],
'post_type' => 'wps-reseller'
);
$file_errors = $this->wps_parse_file_errors($file);
$upload_overrides = array( 'test_form' => FALSE );
if($file_errors['error'] == 0) {
if($new_reseller_id = wp_insert_post( $new_reseller_profile_data )){
$uploaded_file = wp_handle_upload( $file, $upload_overrides );
$wp_filetype = wp_check_filetype( basename( $uploaded_file['file'] ), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ),
'post_content' => '',
'post_author' => '',
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_parent' => $new_reseller_id,
'guid' => $uploads['baseurl'] . $uploads['subdir'] . '/' . $file['name']
);
echo $uploads['baseurl'].'<br />';
echo $file['name'].'<br />';
var_dump($uploads); exit;
$attachment_id = wp_insert_post( $attachment );
$attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] );
// actualizează metadatele atașamentului
wp_update_attachment_metadata( $attachment_id, $attach_data );
set_post_thumbnail( $new_reseller_id, $attachment_id );
}
}
}
}
protected function wps_parse_file_errors($file){
define('MAX_UPLOAD_SIZE', 200000);
define('TYPE_WHITELIST', serialize(array(
'image/jpeg',
'image/png',
'image/gif'
)));
$result = array();
$result['error'] = 0;
if($file['error']){
$result['error'] = "Nu a fost încărcat niciun fișier sau a apărut o eroare la încărcare!";
return $result;
}
$image_data = getimagesize($file['tmp_name']);
if(!in_array($image_data['mime'], unserialize(TYPE_WHITELIST))){
$result['error'] = 'Imaginea ta trebuie să fie un jpeg, png sau gif!';
}elseif(($file['size'] > MAX_UPLOAD_SIZE)){
$result['error'] = 'Imaginea ta a fost ' . $file['size'] . ' bytes! Nu trebuie să depășească ' . MAX_UPLOAD_SIZE . ' bytes.';
}
return $result;
}
Întrebări:
- de ce thumbnail-ul este gol în biblioteca de media? Iată ce se încarcă:
- Cum pot face ca imaginea să apară în interfața de administrare?
Dacă adaug fișiere în bibliotecă folosind managerul de media, thumbnail-urile și imaginile apar așa cum este de așteptat.
Dacă este relevant, acesta este un instalat multisite.

Încearcă acest cod pentru atașamentul tău
$uploaded_file = wp_handle_upload( $file, $upload_overrides );
$attachment = array(
'post_mime_type' => $uploaded_file['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ),
'post_content' => '',
'post_author' => '',
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_parent' => $new_reseller_id,
'guid' => $uploaded_file['file']
);
$attachment_id = wp_insert_attachment( $attachment, $uploaded_file['file'] );
$attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] );
// actualizează metadatele atașamentului
wp_update_attachment_metadata( $attachment_id, $attach_data );
//Setează ca imagine reprezentativă
set_post_thumbnail ($new_reseller_id, $attachment_id );
Pentru a obține imaginea reprezentativă a postării
dacă ești în buclă, atunci
the_post_thumbnail
îți va afișa imaginea reprezentativă. altfel folosește
get_the_post_thumbnail ( $new_reseller_id )
