wordpress - 带有后备功能的 WordPress 简码
问题描述
我正在构建一个使用地理服务 Web 服务的简单插件,而我正在尝试根据其位置动态更改 WordPress 页面上的内容。我让它有点工作,但我的问题是它同时返回特定于位置的文本和默认值。我知道这是因为我不止一次使用简码实例,但我不知道如何将其更改为仅显示特定于位置的内容,如果位置未设置或与简码参数不匹配,则回退到默认一个。我不想将“默认”添加为简码参数,因为它可能包含 HTML 或其他内容。
这是我的简码示例:
[geo city="Orlando"]<a href="#">555-123-6349</a>[/geo][geo city="Raleigh"]<a href="#">919-999-9999</a>[/geo][geo city="Default"]<a href="#">Default text here</a>[/geo]
因此,基于上述内容,如果用户来自奥兰多,则所需结果将显示奥兰多的电话号码,如果用户来自罗利,则将显示罗利号码。否则,如果他们不是来自这些地方的任何一个,它将使用默认值。
这是我的简码:
function geo_services( $atts , $content = null ) {
// Attributes
extract(shortcode_atts(array(
'city' => '',
'state' => '',
), $atts));
require_once('geoplugin.class.php');
$geoplugin = new geoPlugin();
$geoplugin->locate();
if($city === $geoplugin->city){
return $content;
} elseif ($state === $geoplugin->region){
return $content;
} elseif ($city === 'Default') {
return $content;
}
}
add_shortcode( 'geo', 'geo_services' );
解决方案
我相信您可能会误解短代码在 WP 中的工作方式。在您的示例中,您向内容添加了 3 个简码。这些短代码中的每一个都将运行。不是其中之一。这样做,
[geo city="Orlando"]<a href="#">555-123-6349</a>[/geo][geo city="Raleigh"]<a href="#">919-999-9999</a>[/geo][geo city="Default"]<a href="#">Default text here</a>[/geo]
意味着每一个都将被调用和评估。$geoplugin->city
无论您提供什么属性,总是会返回用户所在的城市。而且由于您$content
在所有情况下都返回,它总是会吐出您在短代码中添加的内容。这就是您看到所有 3 个响应的原因。
相反,我会尝试下面的方法。如果您的目标是根据用户所在的城市输出内容,那么您实际上不需要为短代码提供属性。请参见以下示例:
//in your post/page content, simply use the shortcode geo
[geo]
//your function should be
function geo_services( $atts , $content = null ) {
//
require_once('geoplugin.class.php');
//
$geoplugin = new geoPlugin();
$geoplugin->locate();
//
switch( $geoplugin->city ) {
case 'Orlando':
return '<a href="#">555-123-6349</a>';
break;
case 'Raleigh':
return '<a href="#">919-999-9999</a>';
break;
default:
return '<a href="#">Default text here</a>';
break;
}
}
add_shortcode( 'geo', 'geo_services' );
推荐阅读
- reactjs - 在 React 中:找不到模块:无法解析“react-lodable”?
- java - 如何从字符串中找到具有多个点的数字序列,如 1.2.3.4?
- android - 为什么 RecyclerView 项目在键盘出现时损坏?
- java - 忽略 xmlunit 中的空标签
- codeigniter-3 - 我无法在 codeigniter 中加载视图文件
- android - 按 F9 键切换视频
- java - 从查询中获取较旧的时间戳
- shell - shell:远程执行的方法的退出状态
- java - MarkerView 正在切断图形右侧的值
- javascript - 在es6中将字符串转换为数组