子比文字广告位小工具

这个文字广告位小工具是叫AI写的,备注的还是比较详细,有需要的直接拿走

主要功能就是可以设置广告到期时间,到期替换成自己想要的链接及文字

图片[1]-子比文字广告位小工具-逍遥资源网
图片[2]-子比文字广告位小工具-逍遥资源网

将下面的代码放到func.php即可

/**
* 子比主题文字广告小工具(容器背景跟随主题)
* 功能:展示多组文字广告,支持在后台编辑内容和颜色,自动检测过期广告并替换,手机端隐藏
*/
if (!class_exists(‘ZB_Editable_Text_Ads_Widget’)) {
class ZB_Editable_Text_Ads_Widget extends WP_Widget {
// 小工具构造函数
public function __construct() {
parent::__construct(
‘zb_editable_text_ads_widget’,
‘子比主题 – 小格文字广告’,
array(‘description’ => ‘可在后台编辑内容和颜色的文字广告小工具,容器背景跟随主题样式’)
);
}

// 前台显示小工具
public function widget($args, $instance) {
// 输出小工具开始标签
echo $args[‘before_widget’];

// 输出标题(如果设置了)
if (!empty($instance[‘title’])) {
echo $args[‘before_title’] . apply_filters(‘widget_title’, $instance[‘title’]) . $args[‘after_title’];
}

// 获取广告数据
$ads_count = !empty($instance[‘ads_count’]) ? intval($instance[‘ads_count’]) : 12;
$ads = array();

for ($i = 1; $i <= $ads_count; $i++) {
if (!empty($instance[‘ad_text_’ . $i]) && !empty($instance[‘ad_url_’ . $i])) {
$ads[] = array(
‘text’ => $instance[‘ad_text_’ . $i],
‘url’ => $instance[‘ad_url_’ . $i],
‘expiry’ => !empty($instance[‘ad_expiry_’ . $i]) ? $instance[‘ad_expiry_’ . $i] : date(‘Y-m-d’, strtotime(‘+1 year’)),
‘color’ => !empty($instance[‘ad_color_’ . $i]) ? $instance[‘ad_color_’ . $i] : ‘#007bff’
);
}
}

// 替换链接和文字(默认值)
$replacementUrl = !empty($instance[‘replacement_url’]) ? $instance[‘replacement_url’] : ‘https://90ym.cn/gghz’;
$replacementText = !empty($instance[‘replacement_text’]) ? $instance[‘replacement_text’] : ‘文字广告位现价20/每月’;
$replacementColor = !empty($instance[‘replacement_color’]) ? $instance[‘replacement_color’] : ‘#007bff’;

// 全局样式设置
$border_radius = !empty($instance[‘border_radius’]) ? intval($instance[‘border_radius’]) : 2;
$hover_color = !empty($instance[‘hover_color’]) ? $instance[‘hover_color’] : ‘#FF2805’;
$text_color = !empty($instance[‘text_color’]) ? $instance[‘text_color’] : ‘#ffffff’;
$font_size = !empty($instance[‘font_size’]) ? intval($instance[‘font_size’]) : 14;
$height = !empty($instance[‘height’]) ? intval($instance[‘height’]) : 35;

// 广告内容HTML
?>
<div class=”txtguanggao”>
<?php foreach ($ads as $index => $ad) : ?>
<a href=”<?php echo esc_url($ad[‘url’]); ?>” target=”_blank” class=”dh”
data-expiry=”<?php echo esc_attr($ad[‘expiry’]); ?>”
data-original-color=”<?php echo esc_attr($ad[‘color’]); ?>”
style=”background-color: <?php echo esc_attr($ad[‘color’]); ?>;
color: <?php echo esc_attr($text_color); ?>;
font-size: <?php echo esc_attr($font_size); ?>px;
height: <?php echo esc_attr($height); ?>px;
line-height: <?php echo esc_attr($height); ?>px;
border-radius: <?php echo esc_attr($border_radius); ?>px;”>
<?php echo esc_html($ad[‘text’]); ?>
</a>
<?php endforeach; ?>
</div>

<script>
// 广告到期后替换内容的函数
function replaceExpiredAds() {
const ads = document.querySelectorAll(‘.txtguanggao a’);
const today = new Date();
const replacementUrl = ‘<?php echo esc_js($replacementUrl); ?>’;
const replacementText = ‘<?php echo esc_js($replacementText); ?>’;
const replacementColor = ‘<?php echo esc_js($replacementColor); ?>’;

ads.forEach(ad => {
const expiryDate = new Date(ad.dataset.expiry);

// 如果到期日期小于今天,则替换广告内容
if (expiryDate < today) {
ad.href = replacementUrl;
ad.textContent = replacementText;
ad.style.backgroundColor = replacementColor;
}
});
}

// 页面加载时检查广告到期状态
document.addEventListener(‘DOMContentLoaded’, replaceExpiredAds);

// 每天检查一次广告到期状态
setInterval(replaceExpiredAds, 24 * 60 * 60 * 1000);
</script>

<style>
/**文字广告样式**/
.txtguanggao{
width: 100%;
overflow: hidden;
display: block;
box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);
margin: 0 auto;
padding: 5px 0;
}
.txtguanggao a{
width: calc((100% – 20px) / 4);
float: left;
display: inline-block;
margin: 2.5px;
transition-duration: .3s;
text-decoration: none;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
}
.txtguanggao a:hover{
background-color: <?php echo esc_attr($hover_color); ?> !important;
color: <?php echo esc_attr($text_color); ?> !important;
transform: translateY(-2px);
}

/* 平板设备适配 */
@media screen and (max-width: 1000px) {
.txtguanggao a{
width: calc((100% – 10px) / 2);
}
}

/* 手机端隐藏广告 */
@media screen and (max-width: 767px) {
.txtguanggao {
display: none !important;
}
}
</style>
<?php

// 输出小工具结束标签
echo $args[‘after_widget’];
}

// 后台小工具设置表单
public function form($instance) {
// 默认值设置
$title = !empty($instance[‘title’]) ? $instance[‘title’] : ‘文字广告’;
$ads_count = !empty($instance[‘ads_count’]) ? intval($instance[‘ads_count’]) : 12;
$replacement_url = !empty($instance[‘replacement_url’]) ? $instance[‘replacement_url’] : ‘https://90ym.cn/gghz’;
$replacement_text = !empty($instance[‘replacement_text’]) ? $instance[‘replacement_text’] : ‘文字广告位现价20/每月’;
$replacement_color = !empty($instance[‘replacement_color’]) ? $instance[‘replacement_color’] : ‘#007bff’;

// 全局样式默认值
$border_radius = !empty($instance[‘border_radius’]) ? intval($instance[‘border_radius’]) : 2;
$hover_color = !empty($instance[‘hover_color’]) ? $instance[‘hover_color’] : ‘#FF2805’;
$text_color = !empty($instance[‘text_color’]) ? $instance[‘text_color’] : ‘#ffffff’;
$font_size = !empty($instance[‘font_size’]) ? intval($instance[‘font_size’]) : 14;
$height = !empty($instance[‘height’]) ? intval($instance[‘height’]) : 35;

// 获取当前日期作为默认过期日期
$default_expiry = date(‘Y-m-d’, strtotime(‘+1 month’));
?>

<!– 小工具标题 –>
<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘title’)); ?>”>小工具标题:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘title’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘title’)); ?>”
type=”text” value=”<?php echo esc_attr($title); ?>”>
</p>

<!– 广告数量设置 –>
<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘ads_count’)); ?>”>广告数量:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘ads_count’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘ads_count’)); ?>”
type=”number” min=”1″ max=”20″ value=”<?php echo esc_attr($ads_count); ?>”>
<small>设置要显示的广告数量(1-20)</small>
</p>

<hr>

<!– 全局样式设置 –>
<p><strong>全局样式设置:</strong></p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘text_color’)); ?>”>文字颜色:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘text_color’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘text_color’)); ?>”
type=”color” value=”<?php echo esc_attr($text_color); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘hover_color’)); ?>”>悬停背景色:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘hover_color’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘hover_color’)); ?>”
type=”color” value=”<?php echo esc_attr($hover_color); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘border_radius’)); ?>”>边框圆角(px):</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘border_radius’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘border_radius’)); ?>”
type=”number” min=”0″ max=”20″ value=”<?php echo esc_attr($border_radius); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘font_size’)); ?>”>文字大小(px):</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘font_size’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘font_size’)); ?>”
type=”number” min=”12″ max=”20″ value=”<?php echo esc_attr($font_size); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘height’)); ?>”>广告高度(px):</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘height’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘height’)); ?>”
type=”number” min=”20″ max=”60″ value=”<?php echo esc_attr($height); ?>”>
</p>

<hr>

<!– 过期广告替换设置 –>
<p><strong>过期广告替换设置:</strong></p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘replacement_url’)); ?>”>替换链接:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘replacement_url’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘replacement_url’)); ?>”
type=”url” value=”<?php echo esc_attr($replacement_url); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘replacement_text’)); ?>”>替换文字:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘replacement_text’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘replacement_text’)); ?>”
type=”text” value=”<?php echo esc_attr($replacement_text); ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘replacement_color’)); ?>”>替换后背景色:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘replacement_color’)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘replacement_color’)); ?>”
type=”color” value=”<?php echo esc_attr($replacement_color); ?>”>
</p>

<hr>

<!– 广告内容设置 –>
<p><strong>广告内容设置:</strong></p>

<?php for ($i = 1; $i <= $ads_count; $i++) : ?>
<div style=”padding:10px; background:#f5f5f5; margin-bottom:10px; border-radius:4px;”>
<p><strong>广告 #<?php echo $i; ?></strong></p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘ad_text_’ . $i)); ?>”>广告文字:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘ad_text_’ . $i)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘ad_text_’ . $i)); ?>”
type=”text” value=”<?php echo !empty($instance[‘ad_text_’ . $i]) ? esc_attr($instance[‘ad_text_’ . $i]) : ”; ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘ad_url_’ . $i)); ?>”>广告链接:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘ad_url_’ . $i)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘ad_url_’ . $i)); ?>”
type=”url” value=”<?php echo !empty($instance[‘ad_url_’ . $i]) ? esc_attr($instance[‘ad_url_’ . $i]) : ”; ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘ad_expiry_’ . $i)); ?>”>过期日期:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘ad_expiry_’ . $i)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘ad_expiry_’ . $i)); ?>”
type=”date” value=”<?php echo !empty($instance[‘ad_expiry_’ . $i]) ? esc_attr($instance[‘ad_expiry_’ . $i]) : $default_expiry; ?>”>
</p>

<p>
<label for=”<?php echo esc_attr($this->get_field_id(‘ad_color_’ . $i)); ?>”>背景颜色:</label>
<input class=”widefat” id=”<?php echo esc_attr($this->get_field_id(‘ad_color_’ . $i)); ?>”
name=”<?php echo esc_attr($this->get_field_name(‘ad_color_’ . $i)); ?>”
type=”color” value=”<?php echo !empty($instance[‘ad_color_’ . $i]) ? esc_attr($instance[‘ad_color_’ . $i]) : ‘#007bff’; ?>”>
</p>
</div>
<?php endfor; ?>

<?php
}

// 保存小工具设置
public function update($new_instance, $old_instance) {
$instance = array();
$instance[‘title’] = (!empty($new_instance[‘title’])) ? strip_tags($new_instance[‘title’]) : ”;
$instance[‘ads_count’] = (!empty($new_instance[‘ads_count’]) && intval($new_instance[‘ads_count’]) >= 1 && intval($new_instance[‘ads_count’]) <= 20) ? intval($new_instance[‘ads_count’]) : 12;
$instance[‘replacement_url’] = (!empty($new_instance[‘replacement_url’])) ? esc_url_raw($new_instance[‘replacement_url’]) : ”;
$instance[‘replacement_text’] = (!empty($new_instance[‘replacement_text’])) ? strip_tags($new_instance[‘replacement_text’]) : ”;
$instance[‘replacement_color’] = (!empty($new_instance[‘replacement_color’])) ? sanitize_text_field($new_instance[‘replacement_color’]) : ‘#007bff’;

// 保存全局样式设置
$instance[‘border_radius’] = (!empty($new_instance[‘border_radius’])) ? intval($new_instance[‘border_radius’]) : 2;
$instance[‘hover_color’] = (!empty($new_instance[‘hover_color’])) ? sanitize_text_field($new_instance[‘hover_color’]) : ‘#FF2805’;
$instance[‘text_color’] = (!empty($new_instance[‘text_color’])) ? sanitize_text_field($new_instance[‘text_color’]) : ‘#ffffff’;
$instance[‘font_size’] = (!empty($new_instance[‘font_size’])) ? intval($new_instance[‘font_size’]) : 14;
$instance[‘height’] = (!empty($new_instance[‘height’])) ? intval($new_instance[‘height’]) : 35;

// 保存每个广告的信息
for ($i = 1; $i <= $instance[‘ads_count’]; $i++) {
$instance[‘ad_text_’ . $i] = (!empty($new_instance[‘ad_text_’ . $i])) ? strip_tags($new_instance[‘ad_text_’ . $i]) : ”;
$instance[‘ad_url_’ . $i] = (!empty($new_instance[‘ad_url_’ . $i])) ? esc_url_raw($new_instance[‘ad_url_’ . $i]) : ”;
$instance[‘ad_expiry_’ . $i] = (!empty($new_instance[‘ad_expiry_’ . $i])) ? sanitize_text_field($new_instance[‘ad_expiry_’ . $i]) : ”;
$instance[‘ad_color_’ . $i] = (!empty($new_instance[‘ad_color_’ . $i])) ? sanitize_text_field($new_instance[‘ad_color_’ . $i]) : ‘#007bff’;
}

return $instance;
}
}

// 注册小工具
function register_zb_editable_text_ads_widget() {
register_widget(‘ZB_Editable_Text_Ads_Widget’);
}
add_action(‘widgets_init’, ‘register_zb_editable_text_ads_widget’);
}
© 版权声明
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容