这是我试图实现的一个示例。
假设我有美国各州,每个州有 5 个城市和一个包含每个州内容的自定义模板。
我想在每个城市页面上替换/更改城市名称而不更改内容。
如果我访问加利福尼亚州,然后我单击圣地亚哥,我希望它说 blah blah blah Sandiego blah blah blah,然后如果我点击洛杉矶,我希望它说 blah blah blah 洛杉矶 blah blah blah。
我正在层次结构上制作包含此内容的模板。
我试图通过创建一个模板并在文本周围交替城市名称来节省时间。
内容可以保持不变,只是城市必须每个州更改一个。
我为每个州创建了一个模板,但我需要为每个城市使用相同的模板。
最佳答案
在 WordPress 中,为了实现州和城市的本地页面,我们可以使用 WordPress 页面(我们也可以自定义发布路由,但有时客户更喜欢没有深层嵌套的 url 根级别页面,即 site.abc/state 而不是 site.abc/cpt/州)
- 我们可以将州添加为页面,以进行州全名和短名称跟踪,我们使用它如下: 页面名称:注明全名,例如纽约 Slug :短两个字母代码,例如纽约
因此,在状态页面上的任何给定时间,我们都会获得标题中的状态全名、页面 slug 中的状态短代码等。
- 对于城市,我们可以使用寻址和 WP 永久链接规则使它们看起来像状态的子页面,例如site.abc/st/city
这个url给了我们两个线索,即它是子页面,所以它是城市页面,所以我们将加载这个页面的城市模板,父部分告诉它属于哪个页面/状态,这样我们就可以从中获取一些数据也喜欢最终显示来自同一州的所有其他城市等。
对于 URL 解析:(未经测试的代码,仅供引用)
function custom_endpoints() {
add_rewrite_rule(
'([^/]{2})/([^/]*)',
'index.php?state=$matches[1]&city=$matches[2]',
'top'
);
add_rewrite_tag( '%state%', '([^&]+)' );
add_rewrite_tag( '%city%', '([^&]+)' );
}
add_action( 'init', 'custom_endpoints' );
现在我们可以将这些重写标签添加到查询中作为 query_vars
function em_query_vars($vars) {
array_push($vars, 'state');
array_push($vars, 'city');
return $vars;
}
add_filter('query_vars','em_query_vars');
现在对于模板加载,我们可以使用这些查询标签:(未经测试的代码,仅用于想法)
add_filter('template_include', 'custom_function_for_templates', 1, 1);
function custom_function_for_templates($template) {
global $wp_query;
if (isset($wp_query->query_vars['state']) && isset($wp_query->query_vars['city'])) {
$slug = $wp_query->query_vars['city'];
return plugin_dir_path( __FILE__ ). '/templates/city-template.php';
}
if (isset($wp_query->query_vars['state'])) {
return plugin_dir_path( __FILE__ ). '/templates/state-template.php';
}
return $template;
}
最后,在模板中,您可以使用城市的当前查询标记来替换内容中具有 %%city%% 和 %%st%% 以及 %%state%% 标记的位置,以替换为要显示的正确城市名称包含与当前城市和州相关内容的页面。
希望它能给您足够的想法来根据您当前的设置来实现它。我包含的代码未经测试,因此可能无法工作。但使用的 WordPress Api 中的 Hooks 和 Filter 是正确的,因此您始终可以将自己的逻辑/函数 Hook 到这些步骤来实现它。
编辑:模板中Php级别的搜索替换操作
$content = str_replace("%%city%%", $new_page, $content);
$content = str_replace("%%state%%", get_the_title($state), $content);
$content = str_replace("%%st%%", strtoupper(get_post_field( 'post_name',$state)), $content);
在这里您将看到我正在搜索/替换内容中使用的任何标签
关于javascript - 如何替换或更改 WordPress 模板上的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454653/