Вимога щодо мінімальних розмірів для зображеного зображення?


14

Я створюю бейсбольний веб-сайт із кількома Авторами. З минулого досвіду, як би ви добре не знали когось особисто, це не означає, що він буде слідувати або навіть читати ваші вказівки.

Враховуючи це, я хотів би вимагати, щоб будь-яке зображення, яке автор вирішив "Використовувати як зображене зображення", було не менше 640 пікселів у ширину і мінімум 360 пікселів у висоту.

Я вимагав, щоб у кожній публікації було Featured Image за допомогою плагіна WyPiekacz ; публікація не буде опублікована без обраного зображення. Я блокував можливість для автора Hotlink на інший сайт, видаливши вкладку «From URL» в Дод з допомогою коду Bainternet в.

Тепер мені потрібно вимагати, щоб будь-яке зображення, яке використовується як зображене зображення, було не менше 640 пікселів на 360 пікселів. Я не є кодером, але я розігрувався і намагався використовувати код Маора Баразани як вихідний пункт, але безрезультатно. Його код примушує мінімальні розміри для будь-якого завантажуваного зображення .


Не можу відповісти на ваше запитання, але я повинен сказати спасибі за чудову колекцію зручних фільтрів та функцій;)
Ole Henrik Skogstrøm

ditto, Ole Henrik :)
brasofilo

А що з зображеннями, прикріпленими до публікацій, але не призначеними для використання в якості зображеного зображення? Чи абсолютно неможливо, щоб до кожної публікації було додано лише зображення Популярні зображення?
Чіп Беннетт

Ні, але для кожної публікації потрібне зображення. Це головна причина коду Маора Баразани (посилання вище) змусити хв. розміри для завантаження не працюватимуть (або код ungestaltbar нижче). Ці фрагменти коду змушують ВСІ завантажені зображення до мінімальних розмірів. Користувачі можуть додавати додаткові зображення до своїх публікацій, але "Вибране зображення" має бути достатньо великим, щоб відповідати темі без розтягування. Ось чому я хочу, щоб на вкладці "Медіатека" завантажувача стовпець "Розміри зображень". Користувачі швидко зможуть вибрати зображення, достатньо велике для зображеного зображення.
Тревіс Пфланц

Я отримати , що ви хочете , щоб всі повідомлення , щоб мати більш Показане зображення. Але чи завжди це буде єдине зображення, що додається до публікацій? Або може Стовпчики мають інші зображення в доповненні до Популярному зображенню?
Чіп Беннетт

Відповіді:


2

добре, якщо ви використовуєте плагін WyPiekacz; як ви сказали, щоб перевірити, що пропоноване зображення завантажено, ви можете трохи змінити його, щоб перевірити, чи є зображення, яке воно пропонувало, воно має мінімальний розмір, як вам потрібно.

$has_thumbnail = false;
            if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
                $has_thumbnail = has_post_thumbnail( $post_id );
            }

            $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

            if ( !$has_thumbnail ) {
                $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
            }

Ви можете змінити вищевказаний код у wypiekacz.php на,

$has_thumbnail_proper_dimension = false;
        if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
            $has_thumbnail = has_post_thumbnail( $post_id );
              list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full");
                echo $imgsrc[0];
              if($width>=640 and $height>=360){
                  $has_thumbnail_proper_dimension=true;
               }
        }

        $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

        if ( !$has_thumbnail ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
        }
        if ( !$has_thumbnail_proper_dimension ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) should be atleast 640x360.', 'wypiekacz') );
        }

добре, я не розумію, що ви маєте на увазі під "Tab Library Media".


Ти прекрасна людина! Працює чудово! "Вкладка" Медіатека "знаходиться на екрані завантаження медіа, як, наприклад, при натисканні на" Встановити зображення "або" Завантажити / Вставити "для медіа. Ось скріншот моєї ідеї - picasaweb.google.com/lh/photo/…
Travis Pflanz

Я зробив одну зміну. list($url, $width, $height) = wp_get_attachment_image_src($post_id, 'full');змінено, щоб list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full"); echo $imgsrc[0];перевірити розміри лише зображеного зображення, а не всіх доданих зображень.
Тревіс Пфланц

@TravisPflanz Це функція, яка виводить рядок "Medial Library Tab" codex.wordpress.org/Function_Reference/get_media_item Тут немає фільтру, тому я не думаю, що ви можете змінити його без підключення до файлу wordpress .... Ви можете прийняти відповідь / upvote якщо КОРИСНІ ......
Раджив Віас

2

Я перевірив ядро ​​і, мабуть, мало місця для маневрування.

/wp-admin/includes/media.php - це місце, де створюються вкладки Add Media

Функція get_media_item у рядку 1034 є тією, яка надає таблицю додатків / медіа. Я не бачу в ньому жодного фільтра або попередніх функцій, які викликають цей.

Деякі посилання та зразки коду навколо проблеми.

Я думаю, альтернативним рішенням буде змінити заголовок завантажених зображень та додати його розміри. Я не впевнений у зміні пост_титу завантаженого файлу, але перейменування самого файлу можна досягти за допомогою цих двох фільтрів: sanitize_file_name та wp_handle_upload_prefilter


Отже, те, що ви говорите, - це могло бути можливо ... Можливо? Я дійсно не кодер, тому я перебуваю на волі інших, коли справа стосується написання функцій. Будь-яка підтримка була б чудовою.
Травіс Пфланц

1

Не повна відповідь і не для винагороди, а лише доказ того, що основна концепція працює:

function wpse_attachment_dimension_check( $form_fields, $post ) {

    $meta = wp_get_attachment_metadata($post->ID);

    if ( !empty[$meta['width']] )
        if ( $meta['width'] <= 999 or $meta['height'] <= 349 ) 
        {   
            echo '<p class="error">Image dimensions ...bla</p>';
            exit;
        }
        else
        {
             // Return all form fields
             return $form_fields;
        }
}

add_filter( 'attachment_fields_to_edit', 'wpse_attachment_dimension_check', 10, 2 );

Усього 60secondsSnippet і є одна велика проблема: це буде спрацьовувати за кожне завантаження, і не тільки, якщо хтось готовий додати зображення, оскільки у нас немає способу отримати контекст для завантажувача зображень. Є кілька способів обійти це, в основному, з деякими js-маніпуляціями.

Я повинен працювати зараз, і не маю часу експериментувати з цим. Але я хотів допомогти, як тільки міг, і, можливо, це є відправною точкою для інших.

ура


Дякуємо за відповідь, ваш код робить по суті те, що робить код Маора Баразани (що пов'язано з питанням), хоча ваш набагато кращий.
Травіс Пфланц

1

Це не найвишуканіша відповідь ... але це працює! Плагін "WyPiekacz", хоча і класний, не оновлювався протягом трьох років.

add_action('transition_post_status', 'check_featured_image_size_after_save', 10, 3);

function check_featured_image_size_after_save($new_status, $old_status, $post){
  $run_on_statuses = array('publish', 'pending', 'future');
  if(!in_array($new_status, $run_on_statuses))
    return;

  $post_id = $post->ID;
  if ( wp_is_post_revision( $post_id ) )
    return; //not sure about this.. but apparently save is called twice when this happens

  $image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), "Full" );
  if(!$image_data)
    return; //separate message if no image at all. (I use a plugin for this)

  $image_width = $image_data[1];
  $image_height = $image_data[2];

  // replace with your requirements.
  $min_width = 900;
  $min_height = 400;
  if($image_width < $min_width || $image_height < $min_height){
    // Being safe, honestly $old_status shouldn't be in $run_on_statuses... it wouldn't save the first time!
    $reverted_status = in_array($old_status, $run_on_statuses) ? 'draft' : $old_status;
    wp_update_post(array(
      'ID' => $post_id,
      'post_status' => $reverted_status,
    ));
    $back_link = admin_url("post.php?post=$post_id&action=edit");
    wp_die("Featured Image not large enough, must be at least ${min_width}x$min_height. Reverting status to '$reverted_status'.<br><br><a href='$back_link'>Go Back</a>");
  }
}

Найелегантнішим рішенням з найкращим досвідом користувача буде використання JavaScript для обробки цього як для швидкого редагування, так і для сторінки редагування публікацій. Тоді, на удачу, я додам щось у update_post_metadataфільтр (що повністю працює для запобігання зображеному зображенню, але не дасть попередження, оскільки він працює з AJAX).

Повідомлення адміністратора не відображатимуться через те, що WordPress переспрямовує, і навіть тоді він не відображатиметься в режимі швидкого редагування (мій метод показує попередження про швидке редагування, хоча воно не призначене для стилю).


Це перевірено? Мені це не потрібно було робити час, але приємно робити закладки.
Тревіс Пфланц

Можливо, у понеділок я можу запустити його на нашому сервісі, але у мене щось на 99% схоже на це на виробництві.
Райан Тейлор

0

Ось один із способів переконатися у наявності мініатюри належного розміру перед її відображенням.

Спочатку створіть цю помічну функцію:

function has_post_thumbnail_of_size($width, $height) {
    $thumbnail_id = get_post_thumbnail_id();
    if( $thumbnail_id ) {
        $thumbnail_metadata = wp_get_attachment_metadata( $thumbnail_id );
        if( $thumbnail_metadata['height'] >= $height && $thumbnail_metadata['width'] >= $width ) {
            return true;
        }
    }
    return false;
}

Потім ви можете перевірити, перш ніж показувати мініатюру повідомлення:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}

Мені потрібно заборонити користувачеві додавати зображення, яке занадто мало, не обмежувати його відображення, якщо воно занадто мало. Кожна публікація ОБОВ'ЯЗКОВО містить зображення. У кожному дописі відображатиметься зображення.
Травіс Пфланц

Треба було б зробити тести, але є один із способів я бачу, як це можна зробити: Щоразу, коли завантаження було успішним, WP отримає дані вкладених файлів через ajax, щоб потім відобразити форму деталей вкладених файлів. Це означає, що зображення було вставлено як додаток, а метадані доступні. IDEA: можна приєднати до attachment_fields_to_edit, який отримує об’єкт вкладення як аргумент, а потім перевірити висоту та ширину метаданих, якщо ця перевірка не вдасться, не відображає форму деталей вкладених файлів, як зазвичай, показує повідомлення про помилку та видаляє додаток миттєво . просто ідея.
ungestaltbar

@ungestaltbar, здається, ти маєш правильну ідею. Я не кодер, тому я на волі громади.
Тревіс Пфланц

0

Це зробить все, що потрібно :)

//Adding script to deligate Thumbnail Size
if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 960, 276, true ); // default Post Thumbnail dimensions   
}
//Set different Thumbnail Sizes for Later
if ( function_exists( 'add_image_size' ) ) { 
  add_image_size( 'large-thumb', 960, 276, true ); //(cropped)  
  add_image_size( 'medium-thumb', 605, 174, true ); //(cropped) 
  add_image_size( 'small-thumb', 288, 83, true ); //(cropped) 
  add_image_size( 'small-square', 100, 100, true ); //(cropped) 
}

<?php if ( has_post_thumbnail() ) {
      global $post; //I usually define this in the function that outputs this, fyi
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>'; 
      } else {

      $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));
      foreach ($thumbnails as $thumbnail) {
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>';
      }           
    }   
    ?>

Це використання get_the_post_thumbnail, що також може допомогти вам, тому вам не потрібно було створювати купу fn-коду, який WordPress вже може обробити для вас, лише думка.

Це використовується $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));для захоплення випадкового, якщо його немає, це може допомогти вам рухатися вперед.

Це трохи echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));помітить, що 'small-thumb'воно підходить до тих add_image_size fn, які ми складаємо кілька рядків. Тож якби у вас було, add_image_size( 'small-square', 100, 100, true );ви можете подзвонити 'small-square'альтернативно.

Ура


Дякую за відповідь. Однак це не робить те, що мені потрібно. Веб-сайт - це бейсбольний майданчик MLB, тому випадкова картина Альберта Пухольса не вийде додати до статті про принца Філдера, якщо ви зрозумієте, що я маю на увазі ... Також, як я вже згадував вище, я використовую плагін WyPiekacz для змусити користувачів додавати обране зображення. Отже, питання полягає не в тому, чи вони додають зображення, а в тому, що я хочу змусити їх додати зображення, яке більше 640 ширини та 360 заввишки.
Травіс Пфланц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.