仅当URL末尾有/amp/时才应用函数

时间:2018-08-28 作者:BobGCA

我应用了一个过滤器来删除所有主题样式,但我希望只有当url以/amp/结尾时才会发生这种情况。

下面的代码正在删除。所有页面上的css样式,不过滤permalink的术语。

我正在使用AMP for Wordpress 插件,在URL的末尾添加amp。例如:mysite。com/类别/post slug/放大器/

function remove_all_theme_styles() {
if ( get_permalink($post->ID) . \'/amp/\' ) {
    global $wp_styles;
    $wp_styles->queue = array();
}
}
add_action(\'wp_print_styles\', \'remove_all_theme_styles\', 100);
他们说要补充,但两者都不起作用。

function remove_all_theme_styles() {
if ( $_SERVER[\'REQUEST_URI\'] == get_permalink($post->ID) . \'/amp/\' ) {

3 个回复
SO网友:Nathan Kinkead

在您的示例中,$_SERVER[\'REQUEST_URI\'] 将返回/category/post-slug/amp/ 这与get_permalink($post->ID) 这将返回https://example.com/category/post-slug/

有很多方法可以做到这一点,但我想到的一个简单方法是。。。

if ( strpos($_SERVER[\'REQUEST_URI\'], \'/amp/\' ) !== false ) {

这个strpos() PHP函数在第一个字符串中查找第二个字符串的位置,如果未找到,则返回false。

因此,这实际上是在请求URI中搜索“/amp/”的存在,如果找到了,则继续执行函数的其余部分。

SO网友:De Coder

在某处添加此函数(重命名为所需的名称)

function force_relative_url ($url) {
  return preg_replace (\'/^(http)?s?:?\\/\\/[^\\/]*(\\/?.*)$/i\', \'$2\', \'\' . $url);
}
现在您可以:

if ( $_SERVER[\'REQUEST_URI\'] == force_relative_url( get_permalink( $post->ID ) ) . \'/amp/\' ) {

SO网友:DrLightman

根据您使用的插件,查看其is_amp_endpoint() 作用

您可以在主题函数的另一个插件中以这种方式执行测试。php:

if( function_exists(\'is_amp_endpoint\') && is_amp_endpoint() ) {
    // ... do stuff in AMP
}

结束