Files
roi-theme/wp-content/plugins/advanced-ads/includes/ads/class-ad-group-relation.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

115 lines
2.6 KiB
PHP
Executable File

<?php
/**
* Manage ad and group relationship.
*
* @since 2.0.7
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*/
namespace AdvancedAds\Ads;
use AdvancedAds\Constants;
defined( 'ABSPATH' ) || exit;
/**
* Ad group relation class.
*/
class Ad_Group_Relation {
/**
* Hold groups.
*
* @var array
*/
private $groups = [];
/**
* Create ad group relation.
*
* @param Ad $ad Ad object.
*
* @return void
*/
public function relate( $ad ): void {
$old_groups = get_post_meta( $ad->get_id(), Constants::AD_META_GROUP_IDS, true );
$new_groups = wp_get_object_terms( $ad->get_id(), Constants::TAXONOMY_GROUP, [ 'fields' => 'ids' ] );
if ( empty( $old_groups ) || ! is_array( $old_groups ) ) {
$old_groups = [];
}
$removed_terms = array_diff( $old_groups, $new_groups );
$added_terms = array_diff( $new_groups, $old_groups );
$this->handle_removed_terms( $removed_terms, $ad->get_id() );
$this->handle_added_terms( $added_terms, $ad->get_id() );
update_post_meta( $ad->get_id(), Constants::AD_META_GROUP_IDS, $new_groups );
}
/**
* Handles the removed terms for an ad.
*
* @param array $removed_terms An array of term IDs that have been removed.
* @param int $ad_id The ID of the ad.
*
* @return void
*/
private function handle_removed_terms( $removed_terms, $ad_id ): void {
foreach ( $removed_terms as $group_id ) {
$group = $this->get_group( $group_id );
if ( ! $group ) {
continue;
}
$weights = $group->get_ad_weights();
if ( isset( $weights[ $ad_id ] ) ) {
unset( $weights[ $ad_id ] );
$group->set_ad_weights( $weights );
$group->save();
}
}
}
/**
* Handles the added terms for an ad.
*
* @param array $added_terms An array of term IDs that have been added.
* @param int $ad_id The ID of the ad.
*
* @return void
*/
private function handle_added_terms( $added_terms, $ad_id ): void {
foreach ( $added_terms as $group_id ) {
$group = $this->get_group( $group_id );
if ( ! $group ) {
continue;
}
$weights = $group->get_ad_weights();
if ( ! isset( $weights[ $ad_id ] ) ) {
$weights[ $ad_id ] = Constants::GROUP_AD_DEFAULT_WEIGHT;
$group->set_ad_weights( $weights );
$group->save();
}
}
}
/**
* Get group by id and cache them.
*
* @param int $group_id Group id.
*
* @return Group|bool Group object or false if the group cannot be loaded.
*/
private function get_group( $group_id ) {
if ( ! isset( $this->groups[ $group_id ] ) ) {
$this->groups[ $group_id ] = wp_advads_get_group( $group_id );
}
return $this->groups[ $group_id ];
}
}