<?php /** * Image placeholder. * * @package visual-portfolio */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Class Visual_Portfolio_Image_Placeholder */ class Visual_Portfolio_Image_Placeholder { /** * Visual_Portfolio_Image_Placeholder constructor. */ public function __construct() { if ( is_admin() ) { add_action( 'admin_init', array( $this, 'create_placeholder_image' ), 3 ); } else { add_action( 'wp', array( $this, 'create_placeholder_image' ), 3 ); } } /** * Create a placeholder image in the media library. * For code thanks to WooCommerce. */ public function create_placeholder_image() { // Run only on first plugin install. // This option added in Migration class. if ( get_option( 'vpf_db_version' ) ) { return; } $general_settings = get_option( 'vp_general' ); if ( ! is_array( $general_settings ) ) { $general_settings = array(); } // Don't run when already added placeholder. if ( isset( $general_settings['no_image'] ) && $general_settings['no_image'] ) { return; } // Upload placeholder image to Media Library. $upload_dir = wp_upload_dir(); $source = visual_portfolio()->plugin_path . '/assets/images/placeholder.png'; $filename = $upload_dir['basedir'] . '/visual-portfolio/placeholder.png'; // try to move to /visual-portfolio/ directory. if ( ! file_exists( $upload_dir['basedir'] . '/visual-portfolio' ) ) { // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged @mkdir( $upload_dir['basedir'] . '/visual-portfolio', 0755, true ); } if ( ! file_exists( $upload_dir['basedir'] . '/visual-portfolio' ) ) { $filename = $upload_dir['basedir'] . '/visual-portfolio-placeholder.png'; } if ( ! file_exists( $filename ) ) { copy( $source, $filename ); } if ( ! file_exists( $filename ) ) { return; } $filetype = wp_check_filetype( basename( $filename ), null ); $attachment = array( 'guid' => $upload_dir['url'] . '/' . basename( $filename ), 'post_mime_type' => $filetype['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), 'post_content' => '', 'post_status' => 'inherit', ); $attach_id = wp_insert_attachment( $attachment, $filename ); // Update settings. $general_settings['no_image'] = $attach_id; update_option( 'vp_general', $general_settings ); // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once ABSPATH . 'wp-admin/includes/image.php'; // Generate the metadata for the attachment, and update the database record. $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data ); } } new Visual_Portfolio_Image_Placeholder();