|
|
|
@@ -0,0 +1,18 @@
|
|
|
|
|
<?php
|
|
|
|
|
/** Structured marketing widgets (no commerce/forum behavior). */
|
|
|
|
|
namespace AKSRT\Widgets;
|
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
|
|
|
|
|
|
abstract class MarketingWidgetBase extends \WP_Widget {
|
|
|
|
|
protected string $mode = 'cards';
|
|
|
|
|
public function __construct(string $id, string $name, string $mode) { $this->mode=$mode; parent::__construct($id, esc_html__('AKSRT '.$name,'aksrt'), ['description'=>esc_html__('结构化营销展示模块','aksrt')]); }
|
|
|
|
|
public function form($instance): void { $title=sanitize_text_field((string)($instance['title']??'')); $items=(array)($instance['items']??[]); if(!$items && !empty($instance['items_raw'])) $items=array_filter(array_map('trim',preg_split('/\r?\n/',(string)$instance['items_raw']))); $raw=implode("\n",array_map(static fn($row)=>is_array($row)?implode('|',array_map('strval',$row)):(string)$row,$items)); echo '<p><label>'.esc_html__('标题','aksrt').'</label><input class="widefat" name="'.esc_attr($this->get_field_name('title')).'" value="'.esc_attr($title).'"></p><p><label>'.esc_html__('条目(每行:标题|描述|链接)','aksrt').'</label><textarea class="widefat" rows="6" name="'.esc_attr($this->get_field_name('items_raw')).'">'.esc_textarea($raw).'</textarea></p>'; }
|
|
|
|
|
public function update($new_instance,$old_instance): array { $rows=[]; foreach(preg_split('/\r?\n/',(string)($new_instance['items_raw']??'')) as $line){$parts=array_map('trim',explode('|',$line,3)); if(trim(implode('',$parts))==='')continue; $rows[]=['title'=>sanitize_text_field($parts[0]??''),'desc'=>sanitize_text_field($parts[1]??''),'url'=>esc_url_raw($parts[2]??'')];} return ['title'=>sanitize_text_field($new_instance['title']??''),'items'=>$rows]; }
|
|
|
|
|
public function widget($args,$instance): void { echo $args['before_widget']; $title=apply_filters('widget_title',$instance['title']??'',$instance,$this->id_base); if($title) echo $args['before_title'].esc_html($title).$args['after_title']; $items=(array)($instance['items']??[]); echo '<div class="aksrt-marketing-block aksrt-marketing-block--'.esc_attr($this->mode).'">'; if(!$items){echo '<p class="widget-empty">'.esc_html__('暂无内容','aksrt').'</p>';} else { foreach($items as $item){$title=sanitize_text_field((string)($item['title']??''));$desc=sanitize_text_field((string)($item['desc']??''));$url=esc_url((string)($item['url']??''));$tag=$url?'<a href="'.$url.'">':'<div>'; echo '<article class="aksrt-marketing-card">'.$tag.'<strong>'.esc_html($title).'</strong>'.($desc!==''?'<p>'.esc_html($desc).'</p>':'').($url?'</a>':'</div>').'</article>'; }} echo '</div>'.$args['after_widget']; }
|
|
|
|
|
}
|
|
|
|
|
final class PricingPlansWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_pricing_plans','定价计划','pricing');} }
|
|
|
|
|
final class TestimonialsWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_testimonials','评价轮播','testimonials');} }
|
|
|
|
|
final class FaqWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_faq','FAQ 常见问题','faq');} }
|
|
|
|
|
final class StatsWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_stats','数据统计','stats');} }
|
|
|
|
|
final class HighlightsWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_highlights','亮点卡片','highlights');} }
|
|
|
|
|
final class PartnersWidget extends MarketingWidgetBase { public function __construct(){parent::__construct('aksrt_partners','合作伙伴滚动','partners');} }
|