Поддержка Проблемы и решения Автоматическое получение изображений с содержания за

  • Использовать изображения, которые ассоциированы с записью — это определённо неплохая идея.

    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    
    <?php
    $szPostContent = $post->post_content;
    $szSearchPattern = '~<img [^\>]*\ />~';
    preg_match_all( $szSearchPattern, $szPostContent, $aPics );
    $iNumberOfPics = count($aPics[0]);
    
    if ( $iNumberOfPics > 0 ) {
         for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
              echo $aPics[0][$i];
    };
    };
    
    endwhile;
    endif;
    ?>

    Вышеуказанный код в основном состоит из простого цикла WordPress. Единственное отличие в том, что использован PHP и регулярные выражения для поиска изображений в содержании записи вместо простого отображения записи. Если изображения найдены, то они отображаются.

    Пара вопросов:
    1. Как модифицировать данный код, чтобы выводились не все картинки из поста, а только одна, первая например.
    2. Как сделать так, чтобы найденное изображение прописывалось в произвольное поле записи?

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    
    <?php
    $szPostContent = $post->post_content;
    $szSearchPattern = '~<img [^\>]*\ />~';
    preg_match( $szSearchPattern, $szPostContent, $aPics );
    $iNumberOfPics = count($aPics);
    
    if ( $iNumberOfPics > 0 ) {
         echo $aPics[0];
    };
    
    add_post_meta($post->ID, 'aPic', $aPics[0], $unique = true);
    endwhile;
    endif;
    ?>

    Спасибо, все работает. Тока не так как я планировал(((
    Получается в произвольное поле aPic попадает значение:
    <img class="alignleft size-thumbnail wp-image-37" title="белые" src="../wp-content/uploads/2010/02/neutral_toille-150x150.jpg" alt="" width="150" height="150" />
    Если стоит превьюшка, а если стоит полноразмерное изображение, тогда и
    echo $aPics[0];
    выдает его, что портит все. И во всех премиум шаблонах, в произвольные поля пишется путь к файлу картинки, а не html код с указанием превью и атрибутов. Как бы выдрать урл оригинального изображения?

    Вот например используя такую функцию, можно получить урл превью:

    <?php
    function getImage($post){
    $externalimage = get_post_meta($post->ID, 'external', true);
    $gthumb = get_post_meta($post->ID, 'gthumb', true);
    if ($externalimage=="TRUE"){
    $returnimg = "http://www.yoursite.com/default.png";
    } else {
    if ($gthumb==""){
    $szPostContent = $post->post_content;
    $szSearchPattern = '~<img [^\>]*\ />~';
    
    // Run preg_match_all to grab all the images
    //  and save the results in $aPics
    preg_match_all( $szSearchPattern, $szPostContent, $aPics );
    
    // Check to see if we have at least 1 image
    $iNumberOfPics = count($aPics[0]);
    
    if ( $iNumberOfPics > 0 ) {
    for ( $i=0; $i < 1; $i++ ) {
    $img = explode("\"", $aPics[0][$i]);
    $returnimg =  $img[5];
    //    ==> Added to combat server performance.
    add_post_meta($post->ID, 'gthumb', $returnimg, true);
    
    };//end for
    };//end if no. of pics more than zero
    } else {
    $returnimg =  $gthumb;
    }; // end if gthumb is set
    }; //end of if externalimage
    return $returnimg;
    }//end function getImage
    ?>

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Если речь идёт о картинках, прикреплённых к записи, можно сделать проще:

    <?php
    while (have_posts()) : the_post();
    
    $attachments = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC' ) );
    if ( !empty($attachments) ) {
    	$attachment = array_shift($attachments);
    	echo wp_get_attachment_image($attachment->ID, $size = 'thumbnail', false);
    	$thumbnail_url = wp_get_attachment_image_src($attachment->ID, $size = 'thumbnail');
    	add_post_meta($post->ID, 'aPic', $thumbnail_url, $unique = true);
    }
    
    endwhile;
    ?>

    Спасибо, затестю.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Автоматическое получение изображений с содержания за» закрыта для новых ответов.