- 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>
182 lines
4.2 KiB
PHP
Executable File
182 lines
4.2 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Shortcodes.
|
|
*
|
|
* @package AdvancedAds
|
|
* @author Advanced Ads <info@wpadvancedads.com>
|
|
* @since 1.50.0
|
|
*/
|
|
|
|
namespace AdvancedAds;
|
|
|
|
use AdvancedAds\Framework\Interfaces\Integration_Interface;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Shortcodes.
|
|
*/
|
|
class Shortcodes implements Integration_Interface {
|
|
|
|
/**
|
|
* Hook into WordPress.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function hooks(): void {
|
|
add_shortcode( 'the_ad', [ $this, 'render_ad' ] );
|
|
add_shortcode( 'the_ad_group', [ $this, 'render_group' ] );
|
|
add_shortcode( 'the_ad_placement', [ $this, 'render_placement' ] );
|
|
}
|
|
|
|
/**
|
|
* Renders an ad based on the provided attributes.
|
|
*
|
|
* @param array $atts The attributes for the ad.
|
|
*
|
|
* @return string The rendered ad.
|
|
*/
|
|
public function render_ad( $atts ): string {
|
|
$ad = wp_advads_get_ad( absint( $atts['id'] ?? 0 ) );
|
|
// Early bail!!
|
|
if ( ! $ad ) {
|
|
return '';
|
|
}
|
|
|
|
$atts = is_array( $atts ) ? $atts : [];
|
|
|
|
// Check if there is an inline attribute with or without value.
|
|
if ( isset( $atts['inline'] ) || in_array( 'inline', $atts, true ) ) {
|
|
$atts['inline_wrapper_element'] = true;
|
|
}
|
|
|
|
$atts = $this->prepare_shortcode_atts( $atts );
|
|
|
|
$this->set_shortcode_atts( $ad, $atts );
|
|
|
|
return get_the_ad( $ad, '', $atts );
|
|
}
|
|
|
|
/**
|
|
* Renders a group based on the provided attributes.
|
|
*
|
|
* @param array $atts The attributes for the group.
|
|
*
|
|
* @return string The rendered group.
|
|
*/
|
|
public function render_group( $atts ): string {
|
|
$group = wp_advads_get_group( absint( $atts['id'] ?? 0 ) );
|
|
// Early bail!!
|
|
if ( ! $group ) {
|
|
return '';
|
|
}
|
|
|
|
$atts = is_array( $atts ) ? $atts : [];
|
|
$atts = $this->prepare_shortcode_atts( $atts );
|
|
|
|
$this->set_shortcode_atts( $group, $atts );
|
|
|
|
return get_the_group( $group, '', $atts );
|
|
}
|
|
|
|
/**
|
|
* Renders a placement based on the provided attributes.
|
|
*
|
|
* @param array $atts The attributes for the placement.
|
|
*
|
|
* @return string The rendered placement.
|
|
*/
|
|
public function render_placement( $atts ): string {
|
|
$placement = wp_advads_get_placement( (string) ( $atts['id'] ?? '' ) );
|
|
// Early bail!!
|
|
if ( ! $placement ) {
|
|
return '';
|
|
}
|
|
|
|
$atts = is_array( $atts ) ? $atts : [];
|
|
$atts = $this->prepare_shortcode_atts( $atts );
|
|
|
|
$this->set_shortcode_atts( $placement, $atts );
|
|
|
|
return get_the_placement( $placement, '', $atts );
|
|
}
|
|
|
|
/**
|
|
* Prepare shortcode attributes.
|
|
*
|
|
* @param array $atts array with strings.
|
|
*
|
|
* @return array
|
|
*/
|
|
private function prepare_shortcode_atts( $atts ): array {
|
|
$result = [];
|
|
|
|
/**
|
|
* Prepare attributes by converting strings to multi-dimensional array
|
|
* Example: [ 'output__margin__top' => 1 ] => ['output']['margin']['top'] = 1
|
|
*/
|
|
if ( ! defined( 'ADVANCED_ADS_DISABLE_CHANGE' ) || ! ADVANCED_ADS_DISABLE_CHANGE ) {
|
|
foreach ( $atts as $attr => $data ) {
|
|
// Remove the prefix (change-ad__, change-group__, change-placement__).
|
|
$attr = preg_replace( '/^(change-ad|change-group|change-placement)__/', '', $attr );
|
|
$levels = explode( '__', $attr );
|
|
$last = array_pop( $levels );
|
|
|
|
$cur_lvl = &$result;
|
|
|
|
foreach ( $levels as $lvl ) {
|
|
if ( ! isset( $cur_lvl[ $lvl ] ) ) {
|
|
$cur_lvl[ $lvl ] = [];
|
|
}
|
|
|
|
$cur_lvl = &$cur_lvl[ $lvl ];
|
|
}
|
|
|
|
$cur_lvl[ $last ] = $data;
|
|
}
|
|
|
|
$result = array_diff_key(
|
|
$result,
|
|
[
|
|
'id' => false,
|
|
'blog_id' => false,
|
|
'ad_args' => false,
|
|
]
|
|
);
|
|
}
|
|
|
|
// Ad type: 'content' and a shortcode inside.
|
|
if ( isset( $atts['ad_args'] ) ) {
|
|
$result = array_merge( $result, json_decode( urldecode( $atts['ad_args'] ), true ) );
|
|
}
|
|
|
|
// Flat output array for Ad.
|
|
if ( isset( $result['output'] ) && is_array( $result['output'] ) ) {
|
|
$result = array_merge( $result, $result['output'] );
|
|
unset( $result['output'] );
|
|
}
|
|
|
|
// Special cases.
|
|
if ( isset( $result['tracking']['link'] ) ) {
|
|
$result['url'] = $result['tracking']['link'];
|
|
unset( $result['tracking']['link'] );
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Set shortcode attributes.
|
|
*
|
|
* @param object $entity The entity object.
|
|
* @param array $atts The attributes to set for the entity.
|
|
*
|
|
* @return void
|
|
*/
|
|
private function set_shortcode_atts( $entity, $atts ): void {
|
|
foreach ( $atts as $key => $value ) {
|
|
$entity->set_prop_temp( $key, $value );
|
|
}
|
|
}
|
|
}
|