wordpress wp_insert_attachment() url has wrong file directory - wordpress

i have following code:
$wp_filetype = wp_check_filetype( basename( $image_url ), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url']. '/' . basename( $image_url ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($image_url)),
'post_content' => '',
'post_status' => 'publish'
);
$attach_id = wp_insert_attachment( $attachment, $image_url );
everything works fine, but the attached img tag has a different url than expected in its src attribute. ( wp-contents/uploads instead of wp-contents/uploads/2013/03/ )

Try changing $wp_upload_dir['url'] to $wp_upload_dir['path'], or $uploads['baseurl'] . $uploads['subdir'].

Related

Programmatically add an attachment sets a wrong permalink

I have a few hundreds of PDFs and I try to upload them programmatically in Wordpress and attach them in a custom post type with Advanced Custom Fields.
This is part of my code where I create the attachment
function update_attachment( $f, $pid, $file_url ){
wp_update_attachment_metadata( $pid, $f );
if( empty( $file_url ) )
return false;
$wp_upload_dir = wp_upload_dir();
$filetype = wp_check_filetype( basename( $file_url ), null );
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $file_url ),
'post_parent' => $pid,
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_url ) ),
'post_type' => 'attachment',
'post_content' => '',
'post_status' => 'inherit',
'post_mime_type' => $filetype['type'],
);
$attach_id = wp_insert_attachment( $attachment, $file_url );
return array(
'pid' => $pid,
'url' => $file_url,
'attach_id' => $attach_id
);
}
//create the custom post type
$post_id = wp_insert_post(array (
'post_type' => 'resources',
'post_title' => $file['Title'],
'post_status' => 'publish',
'comment_status' => 'closed',
'ping_status' => 'closed',
));
//Create the attachment in Media
$att = update_attachment( 'file', $post_id , 'migration/' . $file['FileName'] );
//Save the attachment to the ACF field
update_field('field_5eeb34e23731c', $att['attach_id'], $post_id );
The $file variable is an array where I have created before this code and contains the info of the pdf.
The post is created with the correct attachment. However, the permalink of the media file is the one from the post I created.
mydomain.org/resources/filename/‎
So, when I open the url mydomain.org/wp-content/uploads/migration/filename.pdf it redirects to the url above.

Add attachment metadata after wp_insert_attachment()

I am writing a plugin that saves email attachments to a custom disk folder and then adds them as attachments to a custom post type. This all works correctly so far, but I need to save a couple of metadata values. The metadata will always be the same (so far) and it needs to be on any attachment filetype (.zip, .jpg, .txt, etc)
Can anyone tell me how to add a metadata key/value in this code:
$filename = $attachment['filename'];
$mimetype = $attachment['mimetype'];
$data = $attachment['data'];
$upload = wp_upload_bits( $filename, null, $data );
if ( ! $upload['error'] ) {
$attachment_data = array(
'guid' => trailingslashit( $upload['url']) . basename( $filename ),
'post_mime_type' => $mimetype,
'post_parent' => $post_id,
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit',
);
$attachment_id = wp_insert_attachment( $attachment_data, $upload['file'], $post_id );
if ( is_wp_error( $attachment_id ) ) {
return false;
} else {
$attach_data = wp_generate_attachment_metadata( $attachment_id, $upload['file'] );
wp_update_attachment_metadata( $attachment_id, $attach_data );
return true;
}
}
$attach_data above always returns empty.

Wordpress wp_update_attachment_metadata image width and height = 1?

Hello Friends I used to set post thumbnail programmatically.
this is my code.
foreach ($csv as $key => $value) {
$filename = "wp-content/uploads/images/".$value[8].".jpg";
$wp_filetype = wp_check_filetype(basename($filename), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => 'this is the first project file.',
'post_status' => 'Published'
);
$my_post = array(
'post_title' => $value[0],
'post_content' => $value[2],
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post_staff'
);
$post_id = wp_insert_post( $my_post );
$attach_id = wp_insert_attachment( $attachment, $filename,$post_id);
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
add_post_meta($post_id, '_thumbnail_id', $attach_id);
update_post_meta( $post_id, '_staff_name', $value[1] );
update_post_meta( $post_id, '_staff_city', $value[3] );
update_post_meta( $post_id, '_staff_postal_code', $value[4] );
update_post_meta( $post_id, '_staff_direct_line', $value[5] );
update_post_meta( $post_id, '_staff_fax', $value[6] );
update_post_meta( $post_id, '_staff_email', $value[7] );
$tagd = array( 9 );
wp_set_post_terms( $post_id, $tagd, 'department' );
if($value[3] == "St. John's, NL"){
$tagl = array( 8 );
}else if($value[3] == "Corner Brook"){
$tagl = array( 7 );
}
wp_set_post_terms( $post_id, $tagl, 'location' );
if(set_post_thumbnail( $post_id, $attach_id )){
echo "image set";
}
}
This is working fine but the imported feature image with size 1x1 width = 1 and height = 1
why it takes width and height is 1 automatically please help.
when i trying to get image using get_the_post_thumbnail the return image.
image is found but by default the image width = 1 and height = 1 take.
this is my code.
get_the_post_thumbnail( get_the_ID(), array(250,165))
Thank you.
This Function is used to import post with image in wordpress.
function fetch_media($file_url, $post_id) {
require_once(ABSPATH . 'wp-load.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
global $wpdb;
if(!$post_id) {
return false;
}
//directory to import to
$artDir = 'wp-content/uploads/importedmedia/';
//if the directory doesn't exist, create it
if(!file_exists(ABSPATH.$artDir)) {
mkdir(ABSPATH.$artDir);
}
//rename the file... alternatively, you could explode on "/" and keep the original file name
$extpop = explode(".", $file_url);
$ext = array_pop($extpop);
$new_filename = 'blogmedia-'.$post_id.".".$ext; //if your post has multiple files, you may need to add a random number to the file name to prevent overwrites
if (#fclose(#fopen($file_url, "r"))) { //make sure the file actually exists
copy($file_url, ABSPATH.$artDir.$new_filename);
$siteurl = get_option('siteurl');
$file_info = getimagesize(ABSPATH.$artDir.$new_filename);
//create an array of attachment data to insert into wp_posts table
$artdata = array();
$artdata = array(
'post_author' => 1,
'post_date' => current_time('mysql'),
'post_date_gmt' => current_time('mysql'),
'post_title' => $new_filename,
'post_status' => 'inherit',
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_name' => sanitize_title_with_dashes(str_replace("_", "-", $new_filename)), 'post_modified' => current_time('mysql'),
'post_modified_gmt' => current_time('mysql'),
'post_parent' => $post_id,
'post_type' => 'attachment',
'guid' => $siteurl.'/'.$artDir.$new_filename,
'post_mime_type' => $file_info['mime'],
'post_excerpt' => '',
'post_content' => ''
);
$uploads = wp_upload_dir();
$save_path = $uploads['basedir'].'/importedmedia/'.$new_filename;
//insert the database record
$attach_id = wp_insert_attachment( $artdata, $save_path, $post_id );
//generate metadata and thumbnails
if ($attach_data = wp_generate_attachment_metadata( $attach_id, $save_path)) {
wp_update_attachment_metadata($attach_id, $attach_data);
}
//optional make it the featured image of the post it's attached to
$rows_affected = $wpdb->insert($wpdb->prefix.'postmeta', array('post_id' => $post_id, 'meta_key' => '_thumbnail_id', 'meta_value' => $attach_id));
}
else {
return false;
}
return true;
}
Pass value to this function like.
$file_name = 'full path of existing image';
$post_id = '1';
fetch_media($filename,$post_id);
Thank you.

Make Target _Blank With This Attacment PHP

this php below will print like this http://example.com/wp-content/uploads/2013/01/imagename.jpg with anchor text 'DOWNLOAD'
<?php
if ( $attachments = get_children( array(
'post_type' => 'attachment',
'post_mime_type'=>'image',
'numberposts' => 1,
'post_status' => null,
'post_parent' => $post->ID
)));
foreach ($attachments as $attachment) {
echo wp_get_attachment_link( $attachment->ID, '' , false, true, 'Download');
}
?>
1.when user clicking this link, how to target in _blank or open in new tab.
2.is possible this short code combine with Javascript to make Force download link? look like bellow.
if ( $attachments = get_posts( array(
'post_type' => 'attachment',
'post_mime_type'=>'image',
'numberposts' => -1,
'post_status' => 'any',
'post_parent' => $post->ID,
) ) );
foreach ( $attachments as $attachment ) {
echo '<a href="javascript:void(0);"
onclick="document.execCommand(\'SaveAs\', true, \'' . get_permalink( $attachment->ID ) . '\');">
Download This Wallpaper</a>';
}
This is what I meant below in my response.
array(
'post_type' => 'attachment',
'post_mime_type'=>'image',
'numberposts' => 1,
'post_status' => null,
'post_parent' => $post->ID ,
'target' => 'target="_blank"';
)
See if it works this way.
amek teh chages and try this
foreach ( $attachments as $attachment ) {
echo '<a href="javascript:void(0);"
onclick="document.execCommand(\'SaveAs\', true, \'' . get_permalink( $attachment->ID ) . '\');" target="blank">
Download This Wallpaper</a>';
}
hope this will helpt you

Wordpress wp_editor featured thumbnail image doesnt show

i was developing some theme that could create new post on front end. my issue is that when the "add media" has uploaded the photo, everything works well, except that when i set the "set featured image" for that post is not showing on the "thumbnail" when the post is published.
this is the wp_editor code setup:
<?php
$setupev = array(
'media_buttons'=>1,
'textarea_name'=>'post_ne',
'tinymce' => true );
wp_editor('content here', 'create_nepost', $setupev);
?>
this is the code i use to publish new post:
$the_contnt = $_POST['post_ne'];
$new_post = array(
'post_title' => $get_title,
'post_content' => $the_contnt,
'post_date' => date('YmdHis'),
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(8,5)
);
wp_insert_post( $new_post );
is there some code to add-in to get the attachment thumbnail?
you need to use set_post_thumbnail() function. two things you require for this function are the $post_id which is the id you are providing to wp_insert_post() and $attach_id which is the id of attachment.
set_post_thumbnail( $post_id, $attach_id );
you already have $post_id, to find $attach_id
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'`
);
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );

Resources