【问题标题】:how to alternate or change words on Wordpress templates?如何在 Wordpress 模板上替换或更改单词?
【发布时间】:2017-04-18 01:14:44
【问题描述】:

这是我正在尝试实现的示例。

假设我有美国各州,每个州有 5 个城市和一个包含每个州内容的自定义模板。

我想在每个城市页面上交替/更改城市名称而不更改内容。

如果我访问加利福尼亚,然后单击圣地亚哥,我希望它说 blah blah blah Sandiego blah blah blah,然后如果我单击洛杉矶,我希望它说 blah blah blah Los Angeles blah blah blah。

我正在制作包含此内容的层次结构模板。

我试图通过创建一个模板并在文本周围交替城市名称来节省时间。

内容可以保持不变,只是城市必须每个州更改一个。

我为每个州创建了一个模板,但我需要为每个城市使用相同的模板。

【问题讨论】:

  • 如果您将其用作 WP 页面,我曾经做过类似的设置,其中州是父页面,所有城市都是该州的子页面。模板是相同的,但是如果父级然后显示状态内容,则具有逻辑,如果是子级,则显示城市内容......等等
  • 嗯,国家的内容将是独一无二的,不像城市。城市内容会有所不同,但城市名称必须更改,以便我可以为每个州的每个城市重复使用它。我不想使用与州相同的内容。如果我上次没有说清楚,我很抱歉。
  • 对于城市页面.. 只是我猜对了,您将在模板中拥有相同的内容,但城市占位符被更改为实际名称?看起来可以做到,拥有自己的城市模板,内容为 city_name 作为搜索/替换操作,并执行永久链接 add_rewrite_rule 以捕获 url 并加载正确的模板/城市。所以 site.xyz/st/city .. 它告诉我们使用该城市名称加载城市模板,并链接到父页面,即州......
  • 哇,现在说得通了。是否有任何链接或页面具有更深入的搜索和替换示例。我喜欢您为此类项目采用的方法。请将其作为对我的问题或主题的回答提交,以便我将您的回答归功于您。
  • 当然谢谢你我现在会写详细的答案我知道你在追求什么,现在你可能会看到这个我曾经实现它的示例网站,右上角菜单上的frontpointsecurityreviews.com被称为:本地,单击它,您将看到本地页面...

标签: javascript html wordpress wordpress-theming custom-wordpress-pages


【解决方案1】:

在 WordPress 中为州和城市实现本地页面,我们可以使用 WordPress 页面(我们也可以使用自定义发布路线,但有时客户更喜欢没有深度嵌套的 url 的根级别页面,即 site.abc/state 而不是 site.abc/ cpt/状态)

  1. 我们可以将状态添加为页面,以进行状态全名和短名跟踪,我们使用它如下: 页面名称:州全名,例如纽约 Slug : 两个短字母代码,例如纽约

因此,在任何给定时间,一旦在状态页面上,我们就会从标题中获得状态全名,从页面 slug 中获得状态短代码等。

  1. 对于城市,我们可以使用寻址和 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 是正确的,因此您始终可以将自己的逻辑/功能与这些步骤挂钩以实现它。

编辑:模板中 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);

在这里你会看到我正在搜索/替换内容的任何标签

【讨论】:

  • 我还是有点困惑。我在一定程度上得到了它,我会试一试。谢谢。
  • 我感到困惑的地方是我使用的是子主题。那么我要添加一个全新的 JS 文件并链接它吗?还是我在父 JS 文件中添加这个函数?
  • @CesarDiaz 这是我建议的所有 php 代码,没有 JS 代码。看起来你把它和别的东西混淆了?或者您在问其他问题,即如何将 JS 文件添加到子主题?我建议使用 WP JS enqueue hook 在functions.php 中加入队列,或者干脆用谷歌搜索它或为此提出单独的问题,你会得到我或当时可用的人的详细答案。
  • 我需要更多关于如何实现你刚刚展示给我的示例代码的信息,拜托。我在你的网站上给你发电子邮件。
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多