94 lines
2.7 KiB
PHP
94 lines
2.7 KiB
PHP
|
<?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();
|