$ _SERVER ['REQUEST_URI']-重复的内容

时间:2019-01-15 21:18:50

标签: php wordpress

我有一个问题,我不知道如何处理,代码如下:

<?php 
    if (strstr($_SERVER['REQUEST_URI'], '/catalog/')) {

        echo do_shortcode( '[shortcode1]' );
    } 
    elseif (strstr($_SERVER['REQUEST_URI'], '/catalog/site1/')){
        echo do_shortcode( '[shortcode2]' );
    }

    elseif (strstr($_SERVER['REQUEST_URI'], '/catalog/site2/')){
        echo do_shortcode( '[shortcode3]' );
    }
    else{
        the_content();
    }
?>

现在我想在每个子页面上显示不同的简码-但我不能这样做,因为第一个REQUEST_URI包含“目录”,并且每个都在下面。

现在,当我在“ /目录/ site1 /”上时,将显示数据:

[shortcode1]和[shortcode2]

如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

您需要更改if / else的顺序,但是为了避免显示未检查条件的简码,您需要对'/catalog/'进行更严格的检查,以确保后面没有任何内容。您可以使用带有正则表达式的preg_match进行此操作,该正则表达式检查最后一个/之后是否没有单词字符:

if (strpos($_SERVER['REQUEST_URI'], '/catalog/site1/') !== false){
    echo do_shortcode( '[shortcode2]' );
}
elseif (strpos($_SERVER['REQUEST_URI'], '/catalog/site2/') !== false){
    echo do_shortcode( '[shortcode3]' );
}
elseif (preg_match('#/catalog/[^\w]#', $_SERVER['REQUEST_URI'])) {
    echo do_shortcode( '[shortcode1]' );
} 
else{
    the_content();
}

请注意,由于您未使用strstr的结果,因此应使用strpos,因为它更快,