Ukoliko pravite plugine za WP ili python skripte ili nešto treće sa chatgpt ili sa drugim AI možda ne bi bilo loše da se podjeli sa ostalima. možda nekome koristi, a besplatno je. može se možda doći i do dodatnih ideja ili nekih novih funkcija iskoristivosti i slično
evo ja da krenem sa jednim pluginom koji preko pexels apija uvozi u medija library slike na određenu temu i u broju u kom želite
evo ga kod za plugin ako kome treba:
<?php
/*
Plugin Name: Simple Pexels Image Importer
Description: Plugin za uvoz slika sa Pexels API-a u WordPress Media Library (minimalno 1280px širine).
Version: 1.4
Author: Your Name
*/
if (!defined('ABSPATH')) {
exit;
}
// Define your Pexels API key
define('PEXELS_API_KEY', 'Ovdje-upisati-api-key');
define('PEXELS_IMAGE_COUNT', 200); // Increased to 200 images
define('PEXELS_PER_PAGE', 80);
define('MIN_WIDTH', 1280); // Minimum width of the image
// Add options to the WordPress admin menu
function simple_pexels_image_importer_menu() {
add_menu_page(
'Pexels Image Importer',
'Pexels Image Importer',
'manage_options',
'simple_pexels_image_importer',
'simple_pexels_image_importer_page'
);
}
add_action('admin_menu', 'simple_pexels_image_importer_menu');
// Display the image import page
function simple_pexels_image_importer_page() {
?>
<div class="wrap">
<h1>Simple Pexels Image Importer</h1>
<p>Kliknite na dugme ispod da uvezete <?php echo PEXELS_IMAGE_COUNT; ?> slika iz Pexels API-a (minimalno <?php echo MIN_WIDTH; ?>px širine, horizontalna orijentacija).</p>
<form method="post">
<?php wp_nonce_field('simple_pexels_import_action', 'simple_pexels_nonce'); ?>
<label for="keywords">Ključne reči (odvojene zarezima):</label>
<input type="text" name="keywords" id="keywords" placeholder="nature, flowers, sea" />
<label for="image_count">Broj slika:</label>
<input type="number" name="image_count" id="image_count" value="<?php echo PEXELS_IMAGE_COUNT; ?>" min="1" max="200"/>
<input type="submit" name="simple_pexels_import_images" class="button button-primary" value="Uvezi slike odmah">
</form>
</div>
<?php
}
// Function to import images
function simple_pexels_import_images() {
if (!isset($_POST['simple_pexels_import_images']) ||
!wp_verify_nonce($_POST['simple_pexels_nonce'], 'simple_pexels_import_action')) {
return;
}
// Set execution time and memory limit
set_time_limit(300);
ini_set('memory_limit', '512M');
$keywords = isset($_POST['keywords']) ? explode(',', sanitize_text_field(trim($_POST['keywords']))) : ['nature', 'flowers', 'space', 'sea', 'water', 'ocean', 'tree'];
$image_count = isset($_POST['image_count']) ? intval($_POST['image_count']) : PEXELS_IMAGE_COUNT;
$imported_count = 0;
$page = 1;
$errors = [];
// Loop through specified keywords
foreach ($keywords as $keyword) {
if ($imported_count >= $image_count) break;
while ($imported_count < $image_count) {
// Make API request to Pexels API
$response = wp_remote_get(
"https://api.pexels.com/v1/search?query=" . urlencode(trim($keyword)) .
"&per_page=" . PEXELS_PER_PAGE .
"&page=" . $page .
"&orientation=landscape",
array(
'headers' => array(
'Authorization' => PEXELS_API_KEY
),
'timeout' => 60
)
);
if (is_wp_error($response)) {
$errors[] = "API Error: " . $response->get_error_message();
break;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (!isset($body['photos']) || empty($body['photos'])) {
break;
}
foreach ($body['photos'] as $photo) {
if ($imported_count >= $image_count) break 2;
// Check image width and orientation
if ($photo['width'] < MIN_WIDTH || $photo['width'] < $photo['height']) {
continue; // Skip images that are too small or vertical
}
// Use original size of the image
$image_url = $photo['src']['original'];
$image_name = sanitize_title($photo['photographer'] . '-' . $photo['id']) . '.jpg';
// Check if image already exists
if (!image_exists_in_library($image_name)) {
echo '<div class="notice notice-info is-dismissible">';
echo '<p>Preuzimam sliku: ' . esc_html($image_name) . ' (' . $photo['width'] . 'x' . $photo['height'] . ')</p>';
echo '</div>';
$image_id = simple_upload_image_to_library($image_url, $image_name);
if ($image_id) {
// Add meta data
update_post_meta($image_id, 'pexels_id', $photo['id']);
update_post_meta($image_id, 'photographer', $photo['photographer']);
update_post_meta($image_id, 'image_width', $photo['width']);
update_post_meta($image_id, 'image_height', $photo['height']);
$imported_count++;
echo '<div class="notice notice-success is-dismissible">';
echo '<p>Uspješno uvezena slika: ' . esc_html($image_name) . ' (' . $photo['width'] . 'x' . $photo['height'] . ')</p>';
echo '</div>';
}
}
}
$page++;
sleep(1);
}
}
if (!empty($errors)) {
foreach ($errors as $error) {
echo '<div class="notice notice-error is-dismissible"><p>' . esc_html($error) . '</p></div>';
}
}
echo '<div class="notice notice-success is-dismissible">';
echo '<p>Proces završen. Ukupno uvezeno: ' . $imported_count . ' slika.</p>';
echo '</div>';
}
add_action('admin_init', 'simple_pexels_import_images');
// Function to check if an image already exists in the library
function image_exists_in_library($filename) {
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => 1,
'meta_query' => array(
array(
'key' => '_wp_attached_file',
'value' => $filename,
'compare' => 'LIKE'
)
)
);
$query = new WP_Query($args);
return $query->have_posts();
}
// Function to upload images to Media Library
function simple_upload_image_to_library($image_url, $filename = '') {
if (empty($filename)) {
$filename = basename($image_url);
}
$temp_file = download_url($image_url);
if (is_wp_error($temp_file)) {
return false;
}
$file_array = array(
'name' => $filename,
'tmp_name' => $temp_file,
'error' => 0,
'size' => filesize($temp_file)
);
// Handle sideloading the file into the Media Library
$attachment_id = media_handle_sideload($file_array, 0);
@unlink($temp_file);
if (is_wp_error($attachment_id)) {
return false;
}
return $attachment_id;
}
ako ne znate šta bi sa ovim kodom odete na PHP Online Compiler ubacite kod tamo, idete na download, poslije taj fajl nazovete imenom plugina, ubacite u folder istog imena i taj folder sa php fajlom unutra kompresujete sa zip i eto ga plugin spreman za upotrebu. ova napomena vjerovatno treba za one koji se nisu igrali sa ovim i bolje da je ima jer je do nedavno i meni trebalo ovako objašnjeno.
e čemu sad potreba za ovim pluginom. meni trebaju slike za automatiku da poubacujem slike u postove za featured i bar jednu sliku u članku. a kako su članci neke neutralne kategorije može se šibat sa nature ili sličnim slikama. dakle prvo odradim skidanje nekih 200 slika i onda ih na random poubacujem u članke za featured sliku i jednu sliku u članku. ukoliko je npr sajt/blog o slonovima onda se mogu naskidati slike slonova i onda na random poubacivat slike u članke.
eto predstavih vam plugin jedan koji je meni zatrebao.
jel ostali misle da je ovo korisno ili da se nema potrebe za ovim jer svako može sa chatgpt ili nekim drugim AI napraviti skoro svaki plugin/skriptu, što mu treba.
oćemo li nastavljat sa temom ili da je ne započinjemo ako nije korisna. ako je korisna mogu ubaciti i plugin koji ubacuje slike kao featured i jednu u post, sve na random. ili plugin koji sve iz medija library resizuje na 1280px širine ili koji konvertuje sve jpeg u webp. za neke stvari postoje plugini ali ovi su jednostavniji i sa jednim klikom se rješava i nema pretjeranih zajebancija sa njima.
no jeste li vi napravili neku zanimljivu skriptu, plugin, neki tool sa AI?