为什么我的定制函数不是从我的unctions.php文件开始的?

时间:2014-05-12 作者:wilsonf1

我们希望清理一些WordPress URL,并按照以下格式进行一些重写:

实际URL:产品一/产品一指南/

实际URL:产品二/产品二指南/

重写URL:产品一/指南/

重写URL:产品二/指南/

这允许我们在不同的产品中使用相同的子文件夹名称。(无重复的slug问题)

总之,我在函数中有一个函数。实现此功能的php:

// URL replaces
function updateToPerfectURLs($content) {

    $new_content = $content;

    $new_content = str_replace("/product-one-", "/", $new_content);
    $new_content = str_replace("/product-two-", "/", $new_content);

    return $new_content;
}
我现在想做这样的事情:

<?php updateToPerfectURLs(the_permalink())?>
但由于某些原因,没有进行更换,我的永久链接仍会出现如下情况:

domain.com/product-one/product-one-guides
有人能想出一个原因吗?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

它不起作用,因为您混淆了返回值和回显值

updateToPerfectURLs(the_permalink());
在这里updateToPerfectURLs 返回其值,但尚未打印出来。尝试回声/等

你的第二个问题恰恰相反,the_permalink() 不返回permalink,它会发出回声。因此,在你还没有开始函数之前,permalink就已经打印出来了。使用get_permalink() 相反

最后,不要将函数调用直接传递给另一个函数调用,这会使读取和调试变得更加困难

为您提供:

$permalink = get_permalink();
echo updateToPerfectURLs( $permalink );
当然,可能有一种更好的方法可以做到这一点,即使用各种过滤器,而不必在函数中硬编码产品名称。这将是一个你应该问的新问题!我想这会对很多人有用。也许重写端点也可以工作

结束