/
www
/
wwwroot
/
fxdst.com
/
wp-content
/
mu-plugins
/
Upload File
HOME
<?php /** * Plugin Name: FXDST English WordPress Edition * Description: English WordPress edition using the same WebStack layout and navigation model as the Chinese site. * Version: 2.0.0 */ if (!defined('ABSPATH')) exit; function fxdst_en_register_content(){ register_post_type('sites_en',['labels'=>['name'=>'English Tools','singular_name'=>'English Tool','add_new_item'=>'Add English Tool','edit_item'=>'Edit English Tool'],'public'=>true,'show_ui'=>true,'show_in_rest'=>true,'has_archive'=>'en/tools','rewrite'=>['slug'=>'en/tools','with_front'=>false],'supports'=>['title','editor','excerpt','thumbnail','custom-fields'],'menu_icon'=>'dashicons-translation','taxonomies'=>['favorites_en']]); register_taxonomy('favorites_en',['sites_en'],['labels'=>['name'=>'English Categories','singular_name'=>'English Category'],'public'=>true,'show_ui'=>true,'show_in_rest'=>true,'hierarchical'=>true,'rewrite'=>['slug'=>'en/favorites','with_front'=>false]]); } add_action('init','fxdst_en_register_content'); function fxdst_en_rewrites(){ add_rewrite_rule('^en/?$','index.php?fxdst_en_home=1','top'); add_rewrite_rule('^en/(weekly-hot-tools|free-open-source-tools|tool-comparisons|submit-tool|contact-us|partners|blog)/?$','index.php?fxdst_en_view=$matches[1]','top'); } add_action('init','fxdst_en_rewrites'); add_filter('query_vars',function($v){$v[]='fxdst_en_home';$v[]='fxdst_en_view';return $v;}); function fxdst_en_search_request(){return is_search()&&str_starts_with(parse_url($_SERVER['REQUEST_URI']??'',PHP_URL_PATH)??'','/en/');} function fxdst_en_request(){return get_query_var('fxdst_en_home')||get_query_var('fxdst_en_view')||is_post_type_archive('sites_en')||is_singular('sites_en')||is_tax('favorites_en')||fxdst_en_search_request()||(function_exists('fxdst_rank_is_request')&&fxdst_rank_is_request());} function fxdst_en_switch_url($to_en=true){ if(function_exists('fxdst_rank_is_request')&&fxdst_rank_is_request()){$page=get_query_var('fxdst_rank_page');return fxdst_rank_url($page==='hub'?'':$page,$to_en?'en':'zh');} if($to_en){ if(is_singular('sites')){$id=(int)get_post_meta(get_queried_object_id(),'_fxdst_en_post_id',true);return $id?get_permalink($id):home_url('/en/');} if(is_tax('favorites')){$t=get_queried_object();$et=get_term_by('slug',$t->slug,'favorites_en');return $et&&!is_wp_error($et)?get_term_link($et):home_url('/en/');} if(is_page()){$slug=get_post_field('post_name',get_queried_object_id());if(in_array($slug,['weekly-hot-tools','free-open-source-tools','tool-comparisons','submit-tool','contact-us','partners','blog'],true))return home_url('/en/'.$slug.'/');} return home_url('/en/'); } if(is_singular('sites_en')){$id=(int)get_post_meta(get_queried_object_id(),'_fxdst_zh_source_id',true);return $id?get_permalink($id):home_url('/');} if(is_tax('favorites_en')){$t=get_queried_object();$zt=get_term_by('slug',$t->slug,'favorites');return $zt&&!is_wp_error($zt)?get_term_link($zt):home_url('/');} $view=get_query_var('fxdst_en_view');return $view?home_url('/'.$view.'/'):home_url('/'); } add_action('wp_head',function(){if(is_singular('sites')||is_tax('favorites')||is_home()||is_front_page())echo '<link rel="alternate" hreflang="en" href="'.esc_url(fxdst_en_switch_url(true)).'">'."\n";},2); /* Put the language selector in the existing Chinese top action bar on every * front-end page. The English renderer outputs the reciprocal button itself. */ add_action('wp_footer',function(){if(is_admin()||(fxdst_en_request()&&!(function_exists('fxdst_rank_is_request')&&fxdst_rank_is_request()&&function_exists('fxdst_rank_language')&&fxdst_rank_language()==='zh')))return;$url=fxdst_en_switch_url(true);?> <style>.fxdst-top-action-language{background:#edf4ff!important;color:#245fae!important}.fxdst-top-action-language i{color:#1769e0!important}</style> <script>(function(){var url=<?php echo wp_json_encode($url); ?>,bar=document.querySelector('.fxdst-top-actions');if(bar&&!bar.querySelector('.fxdst-top-action-language')){var a=document.createElement('a');a.className='fxdst-top-action fxdst-top-action-language';a.href=url;a.setAttribute('aria-label','English');a.innerHTML='<i class="fa fa-globe" aria-hidden="true"></i><span>English</span>';bar.appendChild(a);}var menu=document.querySelector('#main-menu');if(menu&&!menu.querySelector('.fxdst-sidebar-language')){var li=document.createElement('li');li.className='submit-tag fxdst-sidebar-service-link fxdst-sidebar-language';li.innerHTML='<a href="'+url+'"><i class="fa fa-globe fa-fw"></i><span class="title">English</span></a>';menu.appendChild(li);}}());</script> <?php },30); function fxdst_en_terms($parent=0){return get_terms(['taxonomy'=>'favorites_en','parent'=>(int)$parent,'hide_empty'=>false,'meta_key'=>'_term_order','orderby'=>'meta_value_num','order'=>'DESC']);} function fxdst_en_icon($term){$zh=get_term_by('slug',$term->slug,'favorites');return $zh?get_term_meta($zh->term_id,'_term_ico',true):'fa fa-folder-o';} function fxdst_en_logo(){return function_exists('io_get_option')?io_get_option('logo_normal'):'';} function fxdst_en_small_logo(){return function_exists('io_get_option')?io_get_option('logo_small'):'';} function fxdst_en_sidebar(){ $roots=fxdst_en_terms(0);echo '<div class="sidebar-menu toggle-others fixed"><div class="sidebar-menu-inner"><header class="logo-env"><div class="logo"><a href="/en/" class="logo-expanded" aria-label="FXDST Global Tech Tools Directory"><img class="fxdst-brand-mark" src="'.esc_url(fxdst_en_small_logo()).'" width="52" height="52" alt="" aria-hidden="true"><span class="fxdst-brand-copy"><strong>FXDST</strong><small>Global Tech Tools Directory</small></span></a><a href="/en/" class="logo-collapsed"><img src="'.esc_url(fxdst_en_small_logo()).'" height="40" alt="FXDST Global"></a></div><div class="mobile-menu-toggle visible-xs"><a href="#" data-toggle="mobile-menu"><i class="fa fa-bars"></i></a></div></header><ul id="main-menu" class="main-menu">'; foreach($roots as $root){$children=fxdst_en_terms($root->term_id);$href='/en/#term-'.$root->term_id;echo '<li><a href="'.esc_url($href).'"><i class="'.esc_attr(fxdst_en_icon($root)).' fa-fw"></i><span class="title">'.esc_html($root->name).'</span></a>';if($children){echo '<ul>';foreach($children as $c)echo '<li><a href="'.esc_url(get_term_link($c)).'">'.esc_html($c->name).'</a></li>';echo '</ul>';}echo '</li>';} foreach([['contact-us','fa-envelope-o','Contact Us'],['partners','fa-handshake-o','Partners'],['blog','fa-newspaper-o','Blog']] as $x)echo '<li class="submit-tag fxdst-sidebar-service-link"><a href="/en/'.esc_attr($x[0]).'/"><i class="fa '.esc_attr($x[1]).' fa-fw"></i><span class="title">'.esc_html($x[2]).'</span></a></li>'; echo '<li class="submit-tag fxdst-sidebar-service-link fxdst-sidebar-language"><a href="'.esc_url(fxdst_en_switch_url(false)).'"><i class="fa fa-globe fa-fw"></i><span class="title">中文</span></a></li>'; echo '</ul></div></div>'; } function fxdst_en_topbar(){ $items=[['github-ai','fa-github','GitHub AI',home_url('/en/rankings/github-ai/')],['openrouter','fa-bar-chart','Model Usage',home_url('/en/rankings/openrouter/')],['opencode','fa-terminal','OpenCode',home_url('/en/rankings/opencode/')],['agents','fa-cogs','Agent Benchmarks',home_url('/en/rankings/agents/')],['open-models','fa-cubes','Open Models',home_url('/en/rankings/open-models/')],['','fa-globe','中文',fxdst_en_switch_url(false)]]; echo '<nav class="navbar user-info-navbar" role="navigation"><div class="navbar-content"><ul class="user-info-menu list-inline list-unstyled"><li class="hidden-xs"><a href="#" data-toggle="sidebar"><i class="fa fa-bars"></i></a></li></ul><div class="fxdst-top-actions" aria-label="Quick tools">';foreach($items as $x)echo '<a class="fxdst-top-action fxdst-top-action-'.esc_attr($x[0]?:'language').'" href="'.esc_url($x[3]).'"><i class="fa '.esc_attr($x[1]).'"></i><span>'.esc_html($x[2]).'</span></a>';echo '</div></div></nav><div class="fxdst-header-spacer" aria-hidden="true"></div>'; } function fxdst_en_hero(){ echo '<section class="fxdst-discovery" aria-labelledby="fxdst-discovery-title"><div class="fxdst-discovery-copy"><span class="fxdst-eyebrow">AI / SaaS / Global Tools</span><h1 id="fxdst-discovery-title">Practical tools for global SaaS and AI products</h1><p>For independent developers, global SaaS teams, and AI builders: discover public tools for coding, deployment, payments, SEO, growth, and automation.</p></div><form class="fxdst-tool-search" role="search" method="get" action="/en/"><label class="screen-reader-text" for="fxdst-en-search">Search tools</label><input id="fxdst-en-search" type="search" name="s" value="'.esc_attr(get_search_query()).'" placeholder="Search AI coding, deployment, payments, SEO, and growth tools" autocomplete="off"><button type="submit" aria-label="Search"><i class="fa fa-search"></i></button></form></section>'; } function fxdst_en_begin($title,$desc,$canonical,$zh,$hero=false){ $site=home_url('/');$image=get_theme_file_uri('/images/fxdst-og.png');$org=$site.'#organization';$website=$site.'#website'; $schema=['@context'=>'https://schema.org','@graph'=>[ ['@type'=>'Organization','@id'=>$org,'name'=>'FXDST','alternateName'=>'Direction Helm','url'=>$site,'logo'=>['@type'=>'ImageObject','url'=>$image,'width'=>1200,'height'=>630]], ['@type'=>'WebSite','@id'=>$website,'url'=>$site,'name'=>'FXDST Global Tech Tools Directory','inLanguage'=>['en','zh-CN'],'publisher'=>['@id'=>$org],'potentialAction'=>['@type'=>'SearchAction','target'=>['@type'=>'EntryPoint','urlTemplate'=>home_url('/en/?s={search_term_string}')],'query-input'=>'required name=search_term_string']], ['@type'=>$hero?'CollectionPage':'WebPage','@id'=>$canonical.'#webpage','url'=>$canonical,'name'=>$title,'description'=>$desc,'inLanguage'=>'en','isPartOf'=>['@id'=>$website],'about'=>['@id'=>$org]], ]]; status_header(200);nocache_headers();?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="theme-color" content="#2C2E2F"><title><?php echo esc_html($title);?></title><meta name="description" content="<?php echo esc_attr($desc);?>"><meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1"><link rel="canonical" href="<?php echo esc_url($canonical);?>"><link rel="alternate" hreflang="en" href="<?php echo esc_url($canonical);?>"><link rel="alternate" hreflang="zh-CN" href="<?php echo esc_url($zh);?>"><link rel="alternate" hreflang="x-default" href="<?php echo esc_url($site);?>"><meta property="og:locale" content="en_US"><meta property="og:type" content="website"><meta property="og:site_name" content="FXDST Global Tech Tools Directory"><meta property="og:title" content="<?php echo esc_attr($title);?>"><meta property="og:description" content="<?php echo esc_attr($desc);?>"><meta property="og:url" content="<?php echo esc_url($canonical);?>"><meta property="og:image" content="<?php echo esc_url($image);?>"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="FXDST Global Tech Tools Directory"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="<?php echo esc_attr($title);?>"><meta name="twitter:description" content="<?php echo esc_attr($desc);?>"><meta name="twitter:image" content="<?php echo esc_url($image);?>"><link rel="icon" href="<?php echo esc_url(get_theme_file_uri('/images/fxdst-favicon-192-v20260520.png'));?>" sizes="192x192"><script type="application/ld+json"><?php echo wp_json_encode($schema,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);?></script><?php wp_head();?><style>.fxdst-top-action-language{background:#edf4ff!important;color:#245fae!important}.fxdst-en-page-title{margin:22px 0}.fxdst-en-empty{padding:45px;text-align:center;color:#777}.fxdst-en-content h2{font-size:1.45rem;margin:28px 0 12px}.fxdst-en-content li{margin:8px 0}.fxdst-en-related{margin-top:34px}</style></head><body <?php body_class('page-body '.(function_exists('io_get_option')?io_get_option('theme_mode'):''));?>><div class="page-container"><?php fxdst_en_sidebar();?><div class="main-content"><?php fxdst_en_topbar();if($hero)fxdst_en_hero(); } function fxdst_en_end(){echo '</div>';?><footer class="main-footer sticky footer-type-1"><div class="go-up fxdst-floating-actions" aria-label="Quick actions"><a href="mailto:xxf0036@hotmail.com" class="fxdst-float-action"><i class="fa fa-envelope-o"></i></a><a href="#" rel="go-top" class="fxdst-float-action"><i class="fa fa-angle-up"></i></a></div><div class="footer-inner"><div class="footer-text">Copyright © <?php echo date('Y');?> FXDST Global <span class="fxdst-footer-links"><a href="/privacy-policy/">Privacy Policy</a><span>/</span><a href="/terms-of-service/">Terms of Service</a></span></div></div></footer></div><?php wp_footer();?></body></html><?php exit;} function fxdst_en_thumb($p){$thumb=get_post_meta($p->ID,'_thumbnail',true);$url=get_post_meta($p->ID,'_sites_link',true);if($thumb)return $thumb;if(function_exists('io_get_option')&&function_exists('format_url'))return io_get_option('ico_url').format_url($url).io_get_option('ico_png');return get_theme_file_uri('/images/favicon.png');} function fxdst_en_card($p,$col='col-sm-4 col-md-3'){$url=get_permalink($p);$ico=fxdst_en_thumb($p);$default=get_theme_file_uri('/images/favicon.png');echo '<div class="xe-card '.esc_attr($col).'"><a href="'.esc_url($url).'" class="xe-widget xe-conversations box2 label-info" title="'.esc_attr(get_post_meta($p->ID,'_sites_link',true)).'"><div class="xe-comment-entry"><div class="xe-user-img"><img class="img-circle lazy" src="'.esc_url($ico).'" onerror="this.src=\''.esc_url($default).'\'" width="40" height="40" alt="'.esc_attr($p->post_title).'" loading="lazy"></div><div class="xe-comment"><div class="xe-user-name overflowClip_1"><strong>'.esc_html($p->post_title).'</strong></div><p class="overflowClip_1">'.esc_html($p->post_excerpt).'</p></div></div></a></div>';} function fxdst_en_grid_for_term($term){$q=new WP_Query(['post_type'=>'sites_en','post_status'=>'publish','posts_per_page'=>24,'no_found_rows'=>true,'meta_key'=>'_sites_order','orderby'=>['meta_value_num'=>'DESC','ID'=>'DESC'],'tax_query'=>[['taxonomy'=>'favorites_en','field'=>'term_id','terms'=>$term->term_id]]]);if(!$q->have_posts())return;$more_label=sprintf('View more %s tools',$term->name);echo '<h4 class="text-gray" style="display:inline-block"><i class="'.esc_attr(fxdst_en_icon($term)).'" style="margin-right:27px" id="term-'.intval($term->term_id).'"></i>'.esc_html($term->name).'</h4><a class="btn-move" href="'.esc_url(get_term_link($term)).'" aria-label="'.esc_attr($more_label).'" title="'.esc_attr($more_label).'"><span aria-hidden="true">More</span><span class="screen-reader-text"> '.esc_html($more_label).'</span></a><div class="row">';while($q->have_posts()){$q->the_post();fxdst_en_card(get_post());}echo '</div>';wp_reset_postdata();} add_action('template_redirect',function(){ if(isset($_GET['fxdst_en_random'])&&str_starts_with(parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH),'/en/')){$ids=get_posts(['post_type'=>'sites_en','post_status'=>'publish','numberposts'=>1,'orderby'=>'rand','fields'=>'ids']);if($ids)wp_safe_redirect(get_permalink($ids[0]));exit;} if(get_query_var('fxdst_en_home')){fxdst_en_begin('AI Tool Directory — Coding, MCP, Model APIs & Global SaaS | FXDST','Discover and compare AI coding assistants, Agents, MCP servers, model APIs, deployment, payments, automation, SEO and global SaaS tools for independent builders.',home_url('/en/'),home_url('/'),true);echo '<div class="sites-list" style="margin-bottom:8.5rem">';foreach(fxdst_en_terms(0) as $root){$children=fxdst_en_terms($root->term_id);if($children)foreach($children as $child)fxdst_en_grid_for_term($child);else fxdst_en_grid_for_term($root);}echo '</div>';fxdst_en_end();} if(is_singular('sites_en')){$p=get_queried_object();$zh=fxdst_en_switch_url(false);$terms=wp_get_post_terms($p->ID,'favorites_en');$url=get_post_meta($p->ID,'_sites_link',true);fxdst_en_begin($p->post_title.' — Features, Pricing & Alternatives | FXDST',$p->post_excerpt,get_permalink($p),$zh,false);echo '<div class="container"><div class="row mt-5 mt-sm-0"><div class="col-12 mx-auto"><div class="panel panel-default"><div class="panel-body my-4"><div class="row"><div class="col-12 col-sm-4 col-lg-3"><div class="siteico"><div class="blur blur-layer" style="background:transparent url('.esc_url(fxdst_en_thumb($p)).') no-repeat center center;background-size:cover;animation:rotate 30s linear infinite"></div><img class="img-cover" src="'.esc_url(fxdst_en_thumb($p)).'" alt="'.esc_attr($p->post_title).'"></div></div><div class="col-12 col-sm-8 col-lg-5 mt-4 mt-md-0"><div class="site-body p-xl-4">';foreach($terms as $t)echo '<a class="btn-cat" href="'.esc_url(get_term_link($t)).'">'.esc_html($t->name).'</a> ';echo '<div class="site-name h3">'.esc_html($p->post_title).'</div><div class="mt-2"><p>'.esc_html($p->post_excerpt).'</p><div class="site-go mt-3"><a style="margin-right:10px" href="'.esc_url($url).'" target="_blank" rel="nofollow noopener noreferrer external" class="btn btn-arrow"><span>Visit Website <i class="fa fa-angle-right"></i></span></a><a href="'.esc_url($zh).'" class="btn btn-arrow"><span>中文详情 <i class="fa fa-language"></i></span></a></div></div></div></div><div class="col-12 col-sm-12 col-lg-4 mt-4 mt-lg-0"></div></div><div class="mt-4 pt-4 border-top fxdst-en-content">'.apply_filters('the_content',$p->post_content).'</div></div></div><h4 class="text-gray mt-4"><i class="icon-io-tag" style="margin-right:27px"></i>Related Tools</h4><div class="row mb-5">';$ids=wp_get_object_terms($p->ID,'favorites_en',['fields'=>'ids']);$q=new WP_Query(['post_type'=>'sites_en','post_status'=>'publish','posts_per_page'=>6,'orderby'=>'rand','post__not_in'=>[$p->ID],'tax_query'=>[['taxonomy'=>'favorites_en','field'=>'term_id','terms'=>$ids]]]);while($q->have_posts()){$q->the_post();fxdst_en_card(get_post(),'col-sm-6 col-md-4');}wp_reset_postdata();echo '</div></div></div></div>';fxdst_en_end();} if(is_tax('favorites_en')||is_post_type_archive('sites_en')||fxdst_en_search_request()){$term=is_tax('favorites_en')?get_queried_object():null;$title=$term?$term->name:(get_search_query()?'Search results for “'.get_search_query().'”':'All Tools');$desc=$term?'Browse and compare '.$term->name.' tools.':'Browse the complete English software directory.';fxdst_en_begin($title.' | FXDST',$desc,$term?get_term_link($term):home_url('/en/tools/'),fxdst_en_switch_url(false),true);echo '<h4 class="text-gray fxdst-en-page-title"><i class="icon-io-tag" style="margin-right:27px"></i>'.esc_html($title).'</h4><div class="row">';if(have_posts())while(have_posts()){the_post();fxdst_en_card(get_post());}else echo '<div class="col-12 fxdst-en-empty">No matching tools found.</div>';echo '</div><br>';fxdst_en_end();} $view=get_query_var('fxdst_en_view');if($view){$maps=['weekly-hot-tools'=>['Recently Updated Tools','New and recently refreshed listings.'],'free-open-source-tools'=>['Free & Open Source Tools','Explore free and open-source options.'],'tool-comparisons'=>['Tool Comparisons','Browse categories to compare tools for the same job.'],'submit-tool'=>['Submit a Tool','Recommend a legitimate public software product for review.'],'contact-us'=>['Contact Us','Questions, corrections, and partnership inquiries.'],'partners'=>['Partners','Useful partners and resources for builders.'],'blog'=>['Blog','English editorial content is being prepared.']];[$title,$desc]=$maps[$view];fxdst_en_begin($title.' | FXDST',$desc,home_url('/en/'.$view.'/'),home_url('/'.$view.'/'),true);echo '<h4 class="text-gray fxdst-en-page-title"><i class="fa fa-folder-open-o" style="margin-right:27px"></i>'.esc_html($title).'</h4>'; if(in_array($view,['weekly-hot-tools','free-open-source-tools'],true)){$args=['post_type'=>'sites_en','post_status'=>'publish','posts_per_page'=>48,'orderby'=>'modified','order'=>'DESC'];if($view==='free-open-source-tools')$args['s']='open source free';$q=new WP_Query($args);echo '<div class="row">';while($q->have_posts()){$q->the_post();fxdst_en_card(get_post());}echo '</div>';wp_reset_postdata();} elseif($view==='tool-comparisons'){echo '<div class="row">';foreach(get_terms(['taxonomy'=>'favorites_en','hide_empty'=>true,'orderby'=>'count','order'=>'DESC']) as $t)echo '<div class="col-sm-6 col-md-4"><a class="xe-widget xe-conversations box2 label-info" href="'.esc_url(get_term_link($t)).'"><div class="xe-comment-entry"><div class="xe-user-img"><i class="fa fa-exchange fa-2x"></i></div><div class="xe-comment"><div class="xe-user-name"><strong>'.esc_html($t->name).'</strong></div><p>'.intval($t->count).' tools to compare</p></div></div></a></div>';echo '</div>';} else{$copy=['submit-tool'=>'Email the product name, official URL, and a short explanation to <a href="mailto:xxf0036@hotmail.com">xxf0036@hotmail.com</a>. Listings must represent legitimate public tools and lawful use cases.','contact-us'=>'Contact us at <a href="mailto:xxf0036@hotmail.com">xxf0036@hotmail.com</a>.','partners'=>'For partnership inquiries, email <a href="mailto:xxf0036@hotmail.com">xxf0036@hotmail.com</a>.','blog'=>'The English directory is live. English editorial guides will be added after source-backed review.'];echo '<div class="panel panel-default"><div class="panel-body my-4"><p>'.wp_kses_post($copy[$view]).'</p></div></div>';} fxdst_en_end();} }); add_action('pre_get_posts',function($q){if(is_admin()||!$q->is_main_query())return;if(is_post_type_archive('sites_en')||fxdst_en_search_request()){$q->set('post_type','sites_en');$q->set('posts_per_page',-1);$q->set('nopaging',true);$q->set('meta_key','_sites_order');$q->set('orderby',['meta_value_num'=>'DESC','ID'=>'DESC']);}});