Files
roi-theme/wp-content/plugins/advanced-ads/upgrades/upgrade-2.0.0.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

135 lines
3.1 KiB
PHP
Executable File

<?php
/**
* Update routine
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 2.0.0
*/
use AdvancedAds\Constants;
/**
* Check for existing placements in posts.
*
* @param array $slugs Slugs to check.
*
* @return array
*/
function advads_get_existing_placement_posts( $slugs ): array {
global $wpdb;
foreach ( $slugs as &$slug ) {
$slug = sanitize_title_for_query( $slug );
$slug = str_replace( '_', '-', $slug );
$slug = esc_sql( $slug );
}
$in_string = "'" . implode( "','", $slugs ) . "'";
// phpcs:disable
$posts = $wpdb->get_results(
$wpdb->prepare(
"
SELECT ID, post_name
FROM $wpdb->posts
WHERE post_name IN ($in_string)
AND post_type = %s
",
Constants::POST_TYPE_PLACEMENT
)
);
// phpcs:enable
return empty( $posts ) ? [] : wp_list_pluck( $posts, 'ID', 'post_name' );
}
/**
* Save a placement as post.
*
* @param array $data Placement data array.
*
* @return int|WP_Error
*/
function advads_save_new_placement( $data ) {
// Normalize options.
$options = $data['options'] ?? [];
$display_conditions = $options['placement_conditions']['display'] ?? [];
$visitor_conditions = $options['placement_conditions']['visitors'] ?? [];
unset( $options['placement_conditions'] );
// Find placement type.
$placement_type = empty( $data['type'] ) ? 'default' : $data['type'];
if ( ! wp_advads_has_placement_type( $placement_type ) ) {
wp_advads_create_placement_type( $placement_type );
}
$placement = wp_advads_create_new_placement( $placement_type );
$placement->set_type( $data['type'] );
$placement->set_item( $data['item'] );
$placement->set_slug( $data['slug'] );
$placement->set_title( $data['name'] );
$placement->set_status( 'publish' );
$placement->set_display_conditions( $display_conditions );
$placement->set_visitor_conditions( $visitor_conditions );
$placement->set_props( $options );
$placement->save();
return $placement->get_id();
}
/**
* Backup old Placements
*
* @param array $placements Placements.
*
* @return void
*/
function advads_upgrade_2_0_0_make_backup( $placements ): void {
$backup_key = 'advads-ads-placements_backup';
if ( false !== get_option( $backup_key ) ) {
return;
}
update_option( $backup_key, $placements );
}
/**
* Migrate placements from options to custom post type.
*
* @since 2.0.0
*
* @return void
*/
function advads_upgrade_2_0_0_placement_migration(): void {
$option_key = 'advads-ads-placements';
$placements = get_option( $option_key, [] );
// Early bail!!
if ( ! is_array( $placements ) || empty( $placements ) ) {
return;
}
advads_upgrade_2_0_0_make_backup( $placements );
$existing_posts = advads_get_existing_placement_posts( array_keys( $placements ) );
foreach ( $placements as $slug => $placement ) {
if ( ! is_array( $placement ) || array_key_exists( $slug, $existing_posts ) ) {
continue;
}
$post_id = advads_save_new_placement( array_merge( $placement, [ 'slug' => $slug ] ) );
if ( 0 === $post_id ) {
continue;
}
unset( $placements[ $slug ] );
}
update_option( $option_key, $placements );
}
advads_upgrade_2_0_0_placement_migration();