За последние 24 часа нас посетили 22284 программиста и 1054 робота. Сейчас ищут 685 программистов ...

Название заголовка товара при пакетной загрузке файлов.

Тема в разделе "Сделайте за меня", создана пользователем Алекс_sh, 11 дек 2019.

  1. Алекс_sh

    Алекс_sh Новичок

    С нами с:
    11 дек 2019
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте. Мне нужна помощь в решении одной задачи. Есть такой плагин для пакетной загрузки фотографий woocommerce-photography. Нужно сделать так, чтобы при загрузке фотографий создавались товары в заголовке которых было написано оригинальное имя файла, а не как сейчас «Photography #... from…» Я нашёл PHP файл в котором находятся функции изменения заголовка.
    Код (Text):
    1.     /**
    2.      * Batch upload.
    3.      *
    4.      * @return string
    5.      */
    6.     public function batch_upload() {
    7.         ob_start();
    8.  
    9.         global $wpdb;
    10.  
    11.         check_ajax_referer( 'wc_photography_batch_upload_nonce', 'security' );
    12.  
    13.         $image_id = absint( $_POST['image_id'] );
    14.         $sku      = '';
    15.  
    16.         $collections = array();
    17.  
    18.         // Get the collections.
    19.         if ( isset( $_POST['collections'] ) ) {
    20.             if ( is_array( $_POST['collections'] ) ) {
    21.                 $collections = array_map( 'absint', $_POST['collections'] );
    22.             } elseif ( '' != $_POST['collections'] ) {
    23.                 $_collections = explode( ',', $_POST['collections'] );
    24.                 $_collections = array_map( 'absint', $_collections );
    25.  
    26.                 foreach ( $_collections as $collection_id ) {
    27.                     $collection = get_term( $collection_id, 'images_collections' );
    28.                     $collections[ $collection_id ] = $collection->name;
    29.                 }
    30.             }
    31.         }
    32.  
    33.         $image_metadata = wp_get_attachment_metadata( $image_id );
    34.         if ( ! empty( $image_metadata['image_meta']['title'] ) ) {
    35.             $title = $image_metadata['image_meta']['title'];
    36.         } elseif ( ! empty( $collections ) ) {
    37.             $first_collection = current( $collections );
    38.  
    39.             /* translators: 1: image id 2: first collection name */
    40.             $title = sprintf( __( 'Photography #%1$d from %2$s', 'woocommerce-photography' ), $image_id, $first_collection );
    41.         } else {
    42.             /* translators: 1: image id */
    43.             $title = sprintf( __( 'Photography #%d', 'woocommerce-photography' ), $image_id );
    44.         }
    45.  
    46.         $args = array(
    47.             'post_title'   => $title,
    48.             'post_status'  => 'publish',
    49.             'post_type'    => 'product',
    50.             'post_author'  => get_current_user_id(),
    51.         );
    52.  
    53.         if ( ! empty( $image_metadata['image_meta']['caption'] ) ) {
    54.             $args['post_content'] = $image_metadata['image_meta']['caption'];
    55.             $args['post_excerpt'] = $image_metadata['image_meta']['caption'];
    56.         }
    57.  
    58.         $id = wp_insert_post( $args, true );
    59.  
    60.         if ( is_wp_error( $id ) ) {
    61.             wp_delete_attachment( $image_id, true );
    62.             wp_send_json_error( $id->get_error_message() );
    63.         }
    64.  
    65.         $default_term = absint( get_option( 'default_product_cat', 0 ) );
    66.  
    67.         if ( $default_term ) {
    68.             wp_set_post_terms( $id, array( $default_term ), 'product_cat', true );
    69.         }
    70.  
    71.         // Save the thumbnail and update the attachment.
    72.         set_post_thumbnail( $id, $image_id );
    73.         $wpdb->update( $wpdb->posts, array( 'post_parent' => $id ), array( 'ID' => $image_id ), array( '%d' ), array( '%d' ) );
    74.         update_post_meta( $image_id, '_is_photography_attachment', true );
    75.  
    76.         // Set the product type.
    77.         wp_set_object_terms( $id, 'photography', 'product_type' );
    78.  
    79.         // Sku.
    80.         if ( isset( $_POST['sku_pattern'] ) && '' != $_POST['sku_pattern'] ) {
    81.             $sku_pattern = $wpdb->esc_like( $_POST['sku_pattern'] );
    82.             $last_sku = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '_sku' AND meta_value LIKE %s ORDER BY post_id DESC LIMIT 1", '%' . $sku_pattern . '%' ) );
    83.             $_sku = absint( str_replace( $sku_pattern, '', $last_sku ) );
    84.             $_sku++;
    85.             $sku = $sku_pattern . $_sku;
    86.  
    87.             add_post_meta( $id, '_sku', $sku );
    88.         }
    89.  
    90.         // Price.
    91.         $regular_price = isset( $_POST['price'] ) ? wc_format_decimal( $_POST['price'] ) : 0;
    92.         add_post_meta( $id, '_regular_price', $regular_price );
    93.         add_post_meta( $id, '_sale_price', '' );
    94.         add_post_meta( $id, '_sale_price_dates_from', '' );
    95.         add_post_meta( $id, '_sale_price_dates_to', '' );
    96.         add_post_meta( $id, '_price', $regular_price );
    97.  
    98.         // Set the images_collections taxonomy.
    99.         if ( ! empty( $collections ) ) {
    100.             $_collections = array_keys( $collections );
    101.  
    102.             wp_set_object_terms( $id, $_collections, 'images_collections' );
    103.         }
    104.  
    105.         // Default options.
    106.         add_post_meta( $id, '_visibility', 'visible' );
    107.         add_post_meta( $id, '_stock_status', 'instock' );
    108.         add_post_meta( $id, 'total_sales', 0 );
    109.         add_post_meta( $id, '_downloadable', 'no' );
    110.         add_post_meta( $id, '_virtual', 'no' );
    111.         add_post_meta( $id, '_featured', 'no' );
    112.         add_post_meta( $id, '_manage_stock', 'yes' );
    113.         add_post_meta( $id, '_backorders', 'no' );
    114.         add_post_meta( $id, '_stock', '1' );
    115.  
    116.         do_action( 'wc_photography_batch_upload', $id, $image_id, $sku, $regular_price, $collections );
    117.  
    118.         $response = apply_filters( 'wc_photography_batch_upload_response', array(
    119.             'id'              => $id,
    120.             'image_id'        => $image_id,
    121.             'thumbnail'       => wp_get_attachment_thumb_url( $image_id ),
    122.             'collections_ids' => implode( ',', array_keys( $collections ) ),
    123.             'collections'     => $collections,
    124.             'price'           => $regular_price,
    125.             'sku'             => $sku,
    126.         ) );
    127.  
    128.         wp_send_json( $response );
    129.     }
    130.  
    131.     /**
    132.      * Delete image.
    133.      *
    134.      * @return string
    135.      */
    136.     public function delete_image() {
    137.         check_ajax_referer( 'wc_photography_delete_image_nonce', 'security' );
    138.  
    139.         $id       = absint( $_POST['id'] );
    140.         $image_id = get_post_thumbnail_id( $id );
    141.  
    142.         wp_delete_post( $id, true );
    143.         wp_delete_attachment( $image_id, true );
    144.     }
    Мой уровень в PHP чуть выше нуля, поэтому не знаю получилось ли донести основную мысль. Заранее спасибо.
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Мне почему то кажется создатели плагина подумали о названиях фотографии. Поройтесь в документации.
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Тут в коде три title, первый как раз нужный.
     
  4. Алекс_sh

    Алекс_sh Новичок

    С нами с:
    11 дек 2019
    Сообщения:
    2
    Симпатии:
    0
    В документации, к сожалению, нет такой информации, поскольку плагин задуман для малых объемов продаж фотографий.
    --- Добавлено ---
    Я понял что это тут :
    Код (Text):
    1. * translators: 1: image id */
    2.             $title = sprintf( __( 'Photography #%d', 'woocommerce-photography' ), $image_id );
    только какую функцию надо вписать, чтобы вместо id выдавалось имя файла?
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    попробуте тупо вместо
    PHP:
    1. $title = sprintf( __( 'Photography #%d', 'woocommerce-photography' ), $image_id );
    вставить это
    PHP:
    1. $title = $image_metadata['image_meta']['title'];
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Это третий.
    --- Добавлено ---
    @Artur_hopf, если бы метадата тайттл была, сработало бы первое условие.