পোস্টের সামগ্রী থেকে প্রথম চিত্রটি পান (যেমন: হটলিঙ্কযুক্ত চিত্রগুলি)


10

আমি সরাসরি কোডেক্স থেকে এই কোডটি ব্যবহার করছি ।

function echo_first_image ($postID)
{                   
    $args = array(
    'numberposts' => 1,
    'order'=> 'ASC',
    'post_mime_type' => 'image',
    'post_parent' => $postID,
    'post_status' => null,
    'post_type' => 'attachment'
    );

    $attachments = get_children( $args );

    //print_r($attachments);

    if ($attachments) {
        foreach($attachments as $attachment) {
            $image_attributes = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' )  ? wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) : wp_get_attachment_image_src( $attachment->ID, 'full' );

            echo '<img src="'.wp_get_attachment_thumb_url( $attachment->ID ).'" class="current">';

        }
    }
}

আমি এটিকে এভাবে লুপের মধ্যে ডেকে আছি echo_first_image ($post->ID);

ফাংশনটি কল করে কিন্তু কিছুই আউটপুট পায় না ... যতদূর আমি দেখতে পাচ্ছি এতে কিছুই নেই $attachments

আমি যে পোস্টটি ব্যবহার করছি তাতে আমার একটি চিত্র রয়েছে। এটি কোনও বৈশিষ্ট্যযুক্ত চিত্র বা কোনও গ্যালারী নয়, কেবল পোস্টে।

আমি কি কিছু ভুল করছি, বা কোডটির সাথে কোনও জায়গায় প্রথমে কিছু ভুল আছে?

উত্তর:


22

আপনি যদি আপনার সামগ্রীতে isোকানো কোনও চিত্র প্রদর্শন করতে চান (উদাহরণস্বরূপ হটলিঙ্কযুক্ত চিত্র), আপনাকে অবশ্যই এই (উত্স) এর মতো একটি ফাংশন ব্যবহার করতে হবে :

যোগ থিমের functions.php :

function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

তারপরে <?php echo catch_that_image() ?>আপনি যেখানে চিত্রটি প্রদর্শন করতে চান সেখানে রাখুন।

দ্রষ্টব্য: আপনার সামগ্রীতে সবেমাত্র রাখা একটি হটলিঙ্কযুক্ত চিত্র ফিচারযুক্ত চিত্র, একটি বুল্টিন ওয়ার্ডপ্রেস'স বৈশিষ্ট্য হিসাবে সেট করা যাবে না।


হ্যাঁ, আমি এই কোডটি প্রায় দেখেছি ... মনে হচ্ছে কিছুটা হ্যাক, আপনি "ওয়ার্ডপ্রেস" উপায় হবেন বলে মনে করি ... আমি যখন আশ্চর্য হই তখন কেন কোডেক্স বললে আপনি করতে পারেন এমন প্রিগ_ম্যাচ কেন দরকার? আমি উপরে পোস্ট হিসাবে এটি। সত্যই সত্যই আমার প্রশ্ন question আমি পোস্ট করা কোডটি কি ভুল? ... এটি সত্যিই কাজ করার চেষ্টা করার চেয়ে আরও বেশি। তবে ধন্যবাদ আমি এই ব্যবহার শেষ হতে পারে। আমি "আপনার সামগ্রীতে সজ্জিত একটি চিত্র বৈশিষ্ট্যযুক্ত চিত্র হিসাবে সেট করা যায় না" এর তাত্পর্যটি আমি বুঝতে পারি না। কোনভাবে এই উপর প্রভাব ফেলে। আমি পোস্ট থেকে প্রথম চিত্রটি প্রদর্শন করার চেষ্টা করছি, বৈশিষ্ট্যযুক্ত চিত্রটি নয়।
বাইরোনায়সগুর

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

কোডেক্স রেফারেন্স সম্পর্কে: আপনি দেখতে পাচ্ছেন যে ডকটিকে ফাংশন নামের পরে ডাকা হবে get_childre, একটি সংযুক্তি একটি শিশু পোস্ট তাই এই উদাহরণটি কেবল সংযুক্ত সামগ্রীর জন্যই কাজ করতে পারে।
ডায়ানা

হ্যাঁ আমি জানি আমি কোনও চিত্র itোকানো ছাড়া এটি সংযুক্ত করতে পারি, এটি কিছুটা স্পষ্ট ... তবে আপনি কীভাবে কোনও চিত্র সংযুক্ত না করে কীভাবে সন্নিবেশ করতে পারবেন তা আমি দেখতে পাই না ... যখন আমি আপলোড / সন্নিবেশ টিপব তখন আমার কম্পিউটার থেকে একটি ফাইল আপলোড করুন এবং পোস্টে sertোকান এবং আপডেট করুন তারপরে মিডিয়া লাইব্রেরি লাইব্রেরিতে যান এটি আমাকে বলবে যে আমি যে চিত্রটি আপলোড করেছি তা কি পোস্টের সাথে "সংযুক্ত"? ... বা আমরা এখানে শব্দার্থবিজ্ঞানের কথা বলছি কারণ আমি বুঝতে পারি আপনি কেবল সংযুক্ত চিত্রগুলির জন্য কাজ করছেন সেই বিট কোড সম্পর্কে আপনি কী বলছেন।
বায়রোণ্যসগুর

1
আপনি যে কোনও জায়গায় একটি চিত্র ফাইল হটলিংক করতে পারেন। চিত্র / মিডিয়া সন্নিবেশ ক্লিক করার সময়, "ইউআরএল থেকে" একটি ট্যাব রয়েছে, যেখানে আপনি একটি চিত্রের ইউআরএলকে জানান, অর্থাত্ ইমেজশ্যাক পরিষেবা। রেজেক্স এই চিত্রটি ("যেমন রয়েছে") পেতে সক্ষম হবেন, তবে ডব্লিউপি এই চিত্রটি বৈশিষ্ট্যযুক্ত চিত্র হিসাবে ব্যবহার করতে সক্ষম হবে না, উদাহরণস্বরূপ।
ডায়ানা

3

আমি দুটি উপায় প্রস্তাব:

একটি প্লাগিন ব্যবহার করা

আমি চিত্রটি পান প্লাগইনটি ব্যবহার করে বিবেচনা করব , যাতে আপনি এর মতো কিছু করতে পারেন:

$args = array(
    'post_id' => <id>
    'image_scan' => true
);
get_the_image($args);

উপরেরগুলি এই ক্রমে জিনিসগুলি করার চেষ্টা করবে:

  1. থাম্বনেইল পোস্টটি দেখুন
  2. প্রথম সংযুক্ত চিত্রটি দেখুন
  3. Contentোকানো চিত্রের জন্য পোস্টের সামগ্রী স্ক্যান করুন।

আপনার থিমটিতে বিল্ডিং সমর্থন

তবে, আমি একটি প্লাগইনে একটি ফাংশন ব্যবহার করছি যা উপরের তালিকার প্রথম দুটি আইটেম প্রয়োগ করে।

function gpi_find_image_id($post_id) {
    if (!$img_id = get_post_thumbnail_id ($post_id)) {
        $attachments = get_children(array(
            'post_parent' => $post_id,
            'post_type' => 'attachment',
            'numberposts' => 1,
            'post_mime_type' => 'image'
        ));
        if (is_array($attachments)) foreach ($attachments as $a)
            $img_id = $a->ID;
    }
    if ($img_id)
        return $img_id;
    return false;
}

আপনি ডায়ানার স্নিপেটের মধ্যে তৃতীয় আইটেমটিও এটির সাথে মানিয়ে নিতে পারেন:

function find_img_src($post) {
    if (!$img = gpi_find_image_id($post->ID))
        if ($img = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches))
            $img = $matches[1][0];
    if (is_int($img)) {
        $img = wp_get_attachment_image_src($img);
        $img = $img[0];
    }
    return $img;
}

আপনার functions.phpফাইলে এই দুটি ফাংশনটি কেবল আটকে দিন এবং এগুলি লুপে ব্যবহার করুন:

<?php while (have_posts()) : the_post(); ?>
    <?php if ($img_src = find_img_src($post) : ?>
        <img src="<?php echo $img_src; ?>" />
    <?php endif; ?>
<?php endwhile; ?>

থিমটি বাণিজ্যিকভাবে বিক্রয়ের জন্য হবে তাই আমি শেষ ব্যবহারকারীকে তাদের একটি প্লাগইন ইনস্টল করতে হবে তা বলতে চাই না, তবে ধন্যবাদ।
বায়রোণ্যসগুর

@ বায়ারনয়াসগুর এই বিষয়টি পরিষ্কার করার জন্য উত্তরটি সম্পাদনা করেছেন যে আমি আপনাকে দুটি সমাধান দিয়েছি। দ্বিতীয়টি অনুসরণ করতে আপনাকে একটি প্লাগইন ইনস্টল করতে হবে না।
vmassuchetto

2

কোডটি পুরোপুরি নিরাপদ বলে মনে হচ্ছে। যেমন আপনি বলেছিলেন, পোস্টের সাথে আপনার কোনও চিত্র সংযুক্ত নেই

মিডিয়া অ্যাডমিন প্যানেলে যাওয়ার কথা বিবেচনা করুন এবং সেই পোস্টে একটি চিত্র সংযুক্ত করুন।

পর্যায়ক্রমে এর মধ্যে চিত্রগুলির জন্য একটি রেগেক্স সহ পোস্ট সামগ্রীটি স্ক্র্যাপ করুন।


"সংযুক্ত" হুবহু অর্থ কী তা নিয়ে আমার কি কোনও ভুল ধারণা রয়েছে? .... পোস্টে আমার একটা ছবি আছে ... আপনি যখন 'পোস্টে যুক্ত করুন' ক্লিক করেন তখন এটি সংযুক্ত থাকে না?
বাইরোনায়সগুর

1
আপনার প্রশ্ন থেকে মনে হয়েছে যে আপনি এইচটিএমএল কোডটি টাইপ করেছেন এমন কোনও চিত্রের সাথে লিঙ্ক করে যা অগত্যা ডাব্লুপি দ্বারা সংযুক্ত হয় না।
pcarvalho

1

আমি বুঝতে পারি এটি খুব পুরানো প্রশ্ন, তবে আমি আমার উত্তর এখানে রাখছি যেহেতু সর্বাধিক ভোট দেওয়া উত্তর পিএইচপি-তে নতুন লোকদের পক্ষে উপযুক্ত নয়।

প্রিগ_ম্যাচ পিএইচপি-তে এইচটিএমএল পার্স করার জন্য একটি ভাল পদ্ধতির নয় কারণ প্রিগ_ম্যাচ নিয়মিত প্রকাশের জন্য এবং এইচটিএমএল নিয়মিত প্রকাশ নয়।

পরিবর্তে আমরা DOM ব্যবহার করতে পারি।

function firstImg($html){
  $dom = new DOMDocument;
  $dom->loadHTML($html);
  $images = $dom->getElementsByTagName('img');
  foreach ($images as $image) {
    return $image->getAttribute('src');
  }
  return false;
}

DOM ব্যবহার করা সত্যিই ভাল কারণ আপনি কেবল প্রথম চিত্র পাওয়া ছাড়া অন্য কিছু করতে পারেন এবং এটি এইচটিএমএলকে বিশ্লেষণ করার সঠিক উপায়।

আমি ইচ্ছুক যে আমি প্রথম চিত্র পেতে ওয়ার্ডপ্রেস ফাংশন (CODEX এবং কোর থেকে ফাংশন) ব্যবহারের জন্য উত্তর দিতে পারি তবে এটিই আমি সমস্যা সমাধান করছি।

এটি প্রতিটি মামলার উত্তর নয়!

চিত্রের আকারের অপ্টিমাইজেশনের ক্ষেত্রে বিবেচনা করুন। সেক্ষেত্রে আপনি কেবল এই কোডটি ব্যবহার করতে পারবেন না কারণ পোস্টটিতে কোনও আকারের চিত্র থাকতে পারে।


0

এই কোডটি আমার পক্ষে কাজ করে:

function get_first_image( $post_id ) {
    $attach = get_children( array(
        'post_parent'    => $post_id,
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'order'          => 'DESC',
        'numberposts'    => 1
    ) );
    if( is_array( $attach ) && is_object( current( $attach ) ) ) {
        return current( $attach )->guid;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.