Wordpress wp_editor featured thumbnail image doesnt show - wordpress

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 );

Related

Insert wordpress post using wp_insert_post and attach the featured image

I tried to insert a post using the wp_insert_post function in the functions.php file, the post successfully inserted, but not for the attachment for featured image.
Anyone can help on this, what's wrong with my code below:
$post_if = $wpdb->get_var("SELECT count(post_title) FROM $wpdb->posts WHERE post_title like '$title'");
if($post_if < 1){
//coded
$new_post = array(
'post_title' => $title,
'post_content' => $contents,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post'
);
$post_id = wp_insert_post($new_post);
$image = "https://fake.org/image.jpg";
$media = media_sideload_image($image, $post_id); //$post_id from wp_insert_post
// therefore we must find it so we can set it as featured ID
if(!empty($media) && !is_wp_error($media)){
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'any',
'post_parent' => $post_id
);
// reference new image to set as featured
$attachments = get_posts($args);
if(isset($attachments) && is_array($attachments)){
foreach($attachments as $attachment){
// grab source of full size images (so no 300x150 nonsense in path)
$image = wp_get_attachment_image_src($attachment->ID, 'full');
// determine if in the $media image we created, the string of the URL exists
if(strpos($media, $image[0]) !== false){
// if so, we found our image. set it as thumbnail
set_post_thumbnail($post_id, $attachment->ID);
// only want one image
break;
}
}
}
}
I tried so many tutorials, I found over the web, nothing to work.
Please any one has experienced with this can share a solution.
Big Thanks
You would need to set the "featured image" first and then try to query it. You tried to do the opposite. Also set the parent id in the wp_insert_attachment function not in the arguments.
So try this code:
$new_post = array(
'post_title' => $title,
'post_content' => $contents,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post'
);
$post_id = wp_insert_post($new_post);
$image = "https://fake.org/image.jpg";
$attachment_file_type = wp_check_filetype(basename($image), null);
$wp_upload_dir = wp_upload_dir();
$attachment_args = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($image),
'post_title' => preg_replace('/\.[^.]+$/', '', basename($image)),
'post_mime_type' => $attachment_file_type['type']
);
$attachment_id = wp_insert_attachment($attachment_args, $image, $post_id);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_meta_data = wp_generate_attachment_metadata($attachment_id, $image);
wp_update_attachment_metadata($attachment_id, $attachment_meta_data);
set_post_thumbnail($post_id, $attachment_id);
Here's the documentation page for
wp_insert_attachment
Reference:
https://developer.wordpress.org/reference/functions/wp_insert_attachment/#user-contributed-notes

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.

How to add unfiltered_html capability

When posting html content below it posts fine with the admin, but any other user it strips all HTML tags
$my_post = array('post_title' => $title,
'post_content' => $content,
'post_category' => array(520),
'post_status' => 'Publish',
'post_name' => $url
);
$result = wp_insert_post( $my_post );
Is there a way to allow any user to post HTML tags.
I found that if I use this before the code, it works.
$sub_role = get_role( 'subscriber' );
$sub_role->add_cap( 'unfiltered_html', true );

Need example code for wp_playlist_shortcode

I trying to use wp_playlist_shortcode for creating playlist with audio-files from all blog posts.
In official documentation i saw this parameter:
'ids'
(array) Create a playlist out of these explicit attachment IDs. If empty, a playlist will be created from all $type attachments of $id. Default empty.
I trying this code, and its doesn't working:
$attch_id = array('76', '73', '70', '67');
wp_playlist_shortcode( array( 'ids' => '$attch_id' );
How to create playlist with audio-files from all blog posts? Now i use this code, but it is a not playlist.
$audios = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => null, 'post_parent' => null, 'post_mime_type' => 'audio/mpeg' );
$attachments = get_posts( $audios );
if ($attachments) {
foreach ( $attachments as $post ) {
setup_postdata($post);
$media_url = $post->guid;
$media_title = $post->post_title;
echo wp_audio_shortcode( array( 'src' => $media_url) );
echo '<p>' . $media_title . '</p>';
// print_r($media_url);
}
}
wp_reset_postdata();

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.

Resources