【问题标题】:Disable Jetpack Carousel on specific pages in WordPress在 WordPress 的特定页面上禁用 Jetpack Carousel
【发布时间】:2018-07-26 17:37:30
【问题描述】:

我正在尝试使用我的 functions.php 中的以下代码在特定帖子 ID 上禁用 Jetpack Carousel

function djcoh_disable_carousel( $value ) {

    wp_reset_query();
    if ( is_page( 614 ) ) {
        $value = true; // true to disable Carousel
    }
    // Return original or changed value
    return $value;

}

add_filter( 'jp_carousel_maybe_disable', 'djcoh_disable_carousel' );

这是GitHub上 jp_carousel_maybe_disable 的参考

似乎我无法在 functions.php 中使用 is_page() - 尽管我认为我可以使用 codex 中提到的 wp_reset_query() 来实现

我错过了什么?!

【问题讨论】:

  • 为什么您认为您无法使用 is_page ?你是怎么把它隔离成这样的?您是否尝试过不使用 if 子句的代码来查看代码是否真的禁用了轮播?
  • 我已经验证它会在没有 if 子句的情况下禁用所有页面上的轮播。 This other SO answer让我相信我不能在functions.php中使用is_page() stackoverflow.com/a/22070503/3650556
  • 另外,你为什么使用wp_reset_query();?需要在query_posts之后使用,
  • 我从这里得到了 premium.wpmudev.org/forums/topic/… 并且还看到它在 is_page() 的 WP codex 中被引用
  • 正如@SamvelAleqsanyan 所说,reset 通常在自定义查询之后使用,以将所有内容踢回循环查询。

标签: php wordpress carousel jetpack


【解决方案1】:

您拥有的代码来自一个旨在作为简单插件运行的教程。您的代码当前不起作用的原因是您在 functions.php 中使用它。

在当前形式中,您的函数在作为functions.php 文件的一部分被读取后立即被调用。这通常是在页面形成之前的一段时间,因此您无法使用is_page{} 获取页面 id。

相反,您应该查询页面并获取它的 id,如下所示:

function djcoh_disable_carousel( $value ) {

//get the global
global $post
echo "TEST PAGE ID: ".$post->ID;
//wp_reset_query();
if ( $post->ID == 614 ) {
    $value = true; // true to disable Carousel
}

wp_reset_query();
// Return original or changed value
return $value;

}

add_filter( 'jp_carousel_maybe_disable', 'djcoh_disable_carousel' );

如果这不起作用,试试这个:

function djcoh_disable_carousel( $value ) {

//get the global
global $wp_query;
$post_ID = $wp_query->post->ID;
echo "TEST PAGE ID: ". $post_ID;
//wp_reset_query();
if ( $post_ID == 614 ) {
    $value = true; // true to disable Carousel
}

wp_reset_query();
// Return original or changed value
return $value;

}

add_filter( 'jp_carousel_maybe_disable', 'djcoh_disable_carousel' );

如果上述方法都不起作用,那么您的脚本在获取页面 ID 的过程中被调用得太早了。因此,最简单的选择是简单地将这个脚本放在它自己的 .php 文件中,然后将其上传到插件根文件夹。然后从插件菜单中激活它。

最后的选择是将其创建为过滤器或脚本,并在实际页面模板中添加函数调用。

【讨论】:

  • 感谢您的回答!虽然仍然是同样的问题 - 它适用于没有 if 子句的所有页面 - 但只要我添加 if ( $post->ID == 614 )is_page 它就会停止工作
  • 好的,试试我更新的代码。如果它不起作用,您是否通过 echo 看到页面 ID 输出?
  • 还是不行。它确实回显“TEST PAGE ID:”但不是页面ID
  • 一样!在global $post; 中添加了一个分号,但仍然没有回显页面 ID
  • 刚刚添加了另外 2 个最终选项。
【解决方案2】:

我通过在插件文件中使用 REQUEST_URI 来管理这个:

<?php

// No direct access
if ( ! defined( 'ABSPATH' ) ) exit;

if ( $_SERVER["REQUEST_URI"] === '/PAGE-SLUG/' ) {
    add_filter( 'jp_carousel_maybe_disable', '__return_true' );
}

为您的 slug 更改 PAGE-SLUG,一切就绪。

您可以在PHP's manuals 中找到有关 REQUEST_URI 的信息:

'REQUEST_URI' 为访问此页面而提供的 URI;例如,'/index.html'。

【讨论】:

    【解决方案3】:

    有条件地使 Jetpack 轮播脚本和样式表出队似乎最简单。当 wp_footer 操作触发时,您通常用于控制输出的条件将在请求中可用。

    add_action( 'wp_footer', function() {
        if ( is_page( $page ) ) {
            wp_dequeue_script( 'jetpack-carousel' );
            wp_dequeue_style( 'jetpack-carousel' );
        }
    }
    

    请务必修改is_page 函数以包含$page 参数,否则条件将匹配所有页面。 Place the code in your theme's functions.php 文件和 Jetpack 轮播应该被禁用。

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多