Wp_insert_post () ব্যবহার করার সময় আমি কীভাবে চিত্রের ইউআরএল দ্বারা একটি বৈশিষ্ট্যযুক্ত চিত্র (থাম্বনেইল) সেট করব?


61

Wp_insert_post () এর জন্য ফাংশন রেফারেন্স এন্ট্রিটি দেখার সময় আমি লক্ষ্য করেছি যে অ্যারেতে কোনও প্যারামিটার নেই যা আমার থিমের পোস্টের থাম্বনেইল হিসাবে প্রদর্শিত একটি পোস্টের জন্য 'ফিচার্ড ইমেজ' সেট করতে দেয় to

মিঃ বেনেটের পরামর্শ অনুসারে আমি সেট_পোস্ট_থম্বনেল () এর মতো ফাংশনগুলিতে সন্ধান করেছি , তবে এটি ওয়ার্ডপ্রেস নিজেই এবং ওয়ার্ডপ্রেস কোডেক্সের তুলনায় নতুন সংযোজন বলে মনে হচ্ছে। এর মতো, এমন কোনও উত্স নেই যা আমি খুঁজে পেতে পারি যা ব্যাখ্যা করে যে কীভাবে $ থাম্বনেইল_আইডি প্যারামিটারটি অর্জন এবং সরবরাহ করা উচিত। যদি সত্যিই এটি ব্যবহার করার ফাংশন হয় তবে আমার সমস্ত কিছু যখন ইমেজ ইউআরএল থাকে তখন আমি কীভাবে কোনও বৈধ $ থাম্বনেইল_আইডি প্যারামিটারটি সরবরাহ করতে পারি?

আগাম ধন্যবাদ!

উত্তর:


107

আপনার মিডিয়া লাইব্রেরিতে থাকা অবস্থায় আপনি কোনও চিত্র পোস্ট থাম্বনেল হিসাবে সেট করতে পারেন। আপনার মিডিয়া লাইব্রেরিতে একটি চিত্র যুক্ত করতে আপনার এটি নিজের সার্ভারে আপলোড করতে হবে। ওয়ার্ডপ্রেস ইতিমধ্যে আপনার মিডিয়া লাইব্রেরিতে চিত্রগুলি রাখার জন্য একটি ফাংশন রয়েছে, আপনার কেবলমাত্র একটি স্ক্রিপ্ট দরকার যা আপনার ফাইল আপলোড করে।

ব্যবহার:

Generate_Featured_Image( '../wp-content/my_image.jpg', $post_id );

// $post_id is Numeric ID... You can also get the ID with:
wp_insert_post()

ফাংশন:

function Generate_Featured_Image( $image_url, $post_id  ){
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename = basename($image_url);
    if(wp_mkdir_p($upload_dir['path']))
      $file = $upload_dir['path'] . '/' . $filename;
    else
      $file = $upload_dir['basedir'] . '/' . $filename;
    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $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 );
    $res1= wp_update_attachment_metadata( $attach_id, $attach_data );
    $res2= set_post_thumbnail( $post_id, $attach_id );
}

http://codex.wordpress.org/Function_Reference/wp_upload_dir

http://codex.wordpress.org/Function_Reference/wp_insert_attachment


সম্পাদনা: যোগ করা পথ তৈরি

http://codex.wordpress.org/Function_Reference/wp_mkdir_p


তোমার আগ্রহের জন্য তোমাকে ধন্যবাদ! এটি কেবলমাত্র $ আপলোড_ডির ['ভিত্তির'] (পাথের পরিবর্তে) ব্যবহার করার সময়ই কাজ করে, কারণ যখন আমি সম্পাদনা পোস্টের ইন্টারফেসের মাধ্যমে সংযুক্তিটি পরিদর্শন করি তখন এটি ... / আপলোডস / ফাইল ফাইল হিসাবে উল্লেখ করা হয় EXT আপলোড_ডির ['পথ' ] এটি ... / আপলোডস / 2012/02 / ফাইল ফাইলের মতো করে সংরক্ষণ করবে EXT ফাইলটি কীভাবে রেফারেন্স করা হয়েছে তা একরকম পরিবর্তন করা আরও ভাল হতে পারে তবে কীভাবে তা আমি জানতাম না।
ক্রিস

1
আমার উত্তরে পথের সংযোজন।
রব ভার্মীর

আপনার দ্রুত প্রতিক্রিয়া প্রশংসা :)। আমি এখনও একই ফলাফল পেয়েছি, এখানে আমার সমস্যা প্রদর্শিত একটি স্ক্রিনশট রয়েছে: i.imgur.com/iKTNs.png । উপরের অংশটি আপনার শর্তাধীন প্রতিধ্বনি দেওয়ার ফলাফল, কী চলছে তা দেখার জন্য।
ক্রিস

এটি আবার পরিবর্তন করা হয়েছে, wp_insert_attachment এবং wp_generate_attachment_metadata- এর পুরো পথটি পাস করেনি। আশা করি এটি সমস্যার সমাধান করবে।
রব ভার্মীর

1
সতর্কতা: এই উত্তরটির যদি একই নাম থাকে তবে ফাইলটি পুনরায় লিখে ফেলুন ware এটিতে $ post_id বা কমপক্ষে এককিড () ব্যবহার করে নাম উত্পন্ন করা উচিত
ইভান ক্যাসেলেলানস

10

ব্যবহার করার চেষ্টা করুন set_post_thumbnail()

অটো দ্বারা সম্পাদনা করুন: আপনি আপনার প্রশ্নটি পরিষ্কার করেছেন, তাই আমি চিপ যে প্রতিক্রিয়া জানাল তা স্পষ্ট করব।

মূলত, আপনার পাশাপাশি পোস্টটির জন্য 'সংযুক্তি' তৈরি করা দরকার। ওয়ার্ডপ্রেস মিডিয়া লাইব্রেরিতে কোনও চিত্র আপলোড করা হয়, তার জন্য একটি পোস্টের সংযুক্তি সহ একটি বিশেষ পোস্ট এন্ট্রি করা হয়। এই সংযুক্তিটি পোস্ট_পিতা অভিভাবকের মাধ্যমে কিছু নির্দিষ্ট পোস্টের সাথে লিঙ্কযুক্ত।

সুতরাং যদি আপনি সংযুক্তির আইডিটি জানেন, তবে পোস্ট অবজেক্ট বা আইডি এবং সংযুক্তি আইডি সহ সেট_পোস্ট_থম্বনেলে কল করার পরে কেবল পোস্ট থাম্বনেল পতাকা সেট করা হবে।

আপনি যদি এখনও সংযুক্তিটি তৈরি না করে থাকেন তবে আপনাকে প্রথমে এটি করতে হবে। এটি করার সবচেয়ে সহজ উপায় wp_insert_attachment()। এই ফাংশনটি কয়েকটি প্যারামিটারের একটি অ্যারে নেয়, ফাইলের নাম (ফাইলটি অবশ্যই ইতিমধ্যে সঠিক আপলোড ডিরেক্টরিতে থাকতে হবে), এবং যে সংযুক্তিটি আপনি সংযুক্ত করতে চান তার প্যারেন্ট পোস্টের পোস্ট আইডি।

কেবল কোনও ফাইল আপলোড করা এবং কোনও পোস্টের সাথে সংযুক্ত হওয়া স্বয়ংক্রিয়ভাবে কিছু করে না। এটি কেবল শ্রেণিবিন্যাসের এক ধরণের প্রক্রিয়া। উদাহরণস্বরূপ, গ্যালারী প্রক্রিয়া সেই পোস্টের জন্য [গ্যালারী] তৈরি করতে কোনও পোস্টের সংযুক্ত চিত্রগুলি ব্যবহার করে। কোনও পোস্টের জন্য একটি থাম্বনেইল সংযুক্ত চিত্রগুলির মধ্যে একটি যা থাম্বনেইল হিসাবে সেট করা আছে।

কীভাবে wp_insert_attachment ব্যবহার করবেন সে সম্পর্কে আরও তথ্য কোডেক্সে পাওয়া যাবে (উপরে লিঙ্ক করা)।


ধন্যবাদ তোমার উত্তরের জন্য! আমি কীভাবে থাম্বনেল আইডিটি পুনরুদ্ধার করব? আমি একটি চিত্রের ইউআরএল দিয়ে শুরু করছি, সুতরাং আমার ধারণা আমি অন্য কোনও ফাংশন ব্যবহার করে ওয়ার্ডপ্রেস লাইব্রেরিতে কোনও চিত্র যুক্ত করব?
ক্রিস

আপনি ইতিমধ্যে কোনও পোস্ট সন্নিবেশ করানোর সময় , আমি ধরে নিয়েছিলাম যে আপনি যে পোস্টটি সন্নিবেশ করছেন সেটিতে আপনি ইতিমধ্যে ছবি সংযুক্ত করছেন। এটি কি বৈধ অনুমান নয়?
চিপ বেনেট

দুঃখিত, তবে ইউআরএল দ্বারা কোনও পোস্টে চিত্রগুলি কীভাবে সংযুক্ত করা যায় তা আমি এখনও খুঁজে পাইনি। এছাড়াও, আমি চাই না যে চিত্রটি পোস্টে নিজেই প্রদর্শিত হবে। আমি বর্তমানে ফাংশনটি খুঁজছি যা $ থাম্বনেইল_আইডির ফিরিয়ে দেবে এবং ভেবেছিলাম যে সম্ভবত wp_insert_attachment () কাজ করবে, যতক্ষণ না আমি লক্ষ্য করেছি যে এটি সংযুক্তিটি আপলোড ডিরেক্টরিতে থাকা দরকার। আমি কীভাবে কোনও ইউআরএল দিয়ে সেখানে কোনও চিত্র ফাইল পেতে পারি তা আমি জানি না এবং আমি নিশ্চিত নই যে এটি প্রথম স্থানে যাচ্ছি এটিই ফাংশন কিনা whether আপনার সাহায্যের জন্য ধন্যবাদ!
ক্রিস

আপনি দয়া করে করতে পারেন আপনার প্রশ্নের পুনর্লিখন এই তথ্যের সঙ্গে, ভাল-বর্ণনা করতে কি আপনি সাধন করার চেষ্টা করছেন? (বা পোস্টটি সন্নিবেশ করানোর সময় সংযুক্তি আইডি কীভাবে পাবেন তা জিজ্ঞাসা করার জন্য, এইটিকে ঠিক যেমন রেখে দিন এবং একটি নতুন প্রশ্ন শুরু করুন?)
চিপ বেনেট

আসল প্রশ্নটি সম্পাদিত হয়েছে এবং আংশিকভাবে পুনঃব্যবস্থা করা হয়েছে, দয়া করে ফিরে দেখুন :)।
ক্রিস

9

আমি ডাব্লুপি কোর ফাংশন download_urlএবং ব্যবহার করে রবসের উত্তর উন্নত করতে চাইmedia_handle_sideload

<?php
/**
* Downloads an image from the specified URL and attaches it to a post as a post thumbnail.
*
* @param string $file    The URL of the image to download.
* @param int    $post_id The post ID the post thumbnail is to be associated with.
* @param string $desc    Optional. Description of the image.
* @return string|WP_Error Attachment ID, WP_Error object otherwise.
*/
function Generate_Featured_Image( $file, $post_id, $desc ){
    // Set variables for storage, fix file filename for query strings.
    preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches );
    if ( ! $matches ) {
         return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) );
    }

    $file_array = array();
    $file_array['name'] = basename( $matches[0] );

    // Download file to temp location.
    $file_array['tmp_name'] = download_url( $file );

    // If error storing temporarily, return the error.
    if ( is_wp_error( $file_array['tmp_name'] ) ) {
        return $file_array['tmp_name'];
    }

    // Do the validation and storage stuff.
    $id = media_handle_sideload( $file_array, $post_id, $desc );

    // If error storing permanently, unlink.
    if ( is_wp_error( $id ) ) {
        @unlink( $file_array['tmp_name'] );
        return $id;
    }
    return set_post_thumbnail( $post_id, $id );

}

1
ওয়ার্ডপ্রেস নেটিভ ফাংশন ব্যবহার করা সেরা অনুশীলন, আপনাকে ধন্যবাদ।
মোস্তফা সওফি

কিছু কারণে, এই সংস্করণটি আমাকে "একটি বৈধ URL সরবরাহ করা হয়নি" বলে ত্রুটি দিয়েছে। যেখানে রব ভার্মিরের উত্তর কাজ করেছে।
ফ্লিম

3

set_post_thumbnail() এই প্রয়োজনের জন্য সেরা ফাংশন।

আমি মনে করি, আপনি কোনও সংযুক্তির আইডি খুঁজে পেয়েছেন get_children()বা এর মাধ্যমে get_posts()। ফলাফলের একটি অ্যারে থাকে এবং এই অ্যারের ভিতরে আইডি থাকে। পরীক্ষার জন্য অনুসরণ উদাহরণ; আমি আশা করি এটা কাজ করে; পরীক্ষা ছাড়া লিখুন, শুধুমাত্র স্ক্র্যাচ উপর।

আপনার প্রয়োজনের জন্য এটি গুরুত্বপূর্ণ, আপনি get_the_ID()আপনার সাথে পরিবর্তন করুন যে post-ID; সংযুক্তির আইডি ফিরিয়ে দিন এবং এটি আপনি মথ ব্যবহার করতে পারেন set_post_thumbnail()

$attachments = get_children( 
    array(
        'post_parent' => get_the_ID(), 
        'post_type' => 'attachment', 
        'post_mime_type' => 'image'
    )
);
foreach ( $attachments as $attachment_id => $attachment ) {
    echo wp_get_attachment_image($attachment_id);
}

3

সবে এটি পাওয়া গেছে এবং এটিকে আরও সহজ করে তোলে, কাজ করে তবে আমি কোনও সুরক্ষার স্ক্রাবার নেই

if(!empty($_FILES)){
    require_once( ABSPATH . 'wp-admin/includes/post.php' );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    require_once( ABSPATH . 'wp-admin/includes/media.php' );

    $post_ID = "your post id!";

    $attachment_id = media_handle_upload( 'file', $post_ID );
    set_post_thumbnail( $post_ID, $attachment_id );
}

সহজ বা কি? সঠিক ফাইলগুলি পাওয়ার পরে, ওয়ার্ডপ্রেস মিডিয়া পরিচালনা করবে এবং এটি আপলোড করবে, তারপরে এটিকে থাম্বনেইল হিসাবে সেট করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.