如何使用is_page()仅在特定页面上加载JS和CSS?

时间:2016-01-05 作者:RaymondMik

我正在构建我的第一个WP插件,它应该只在通过插件管理区域中可用的表单选择的特定页面上加载一些JS和CSS文件。在表单中选择后,页面标题将存储在DB wp\\u options表中,然后在名为$Page\\u selected的变量中提取数据。为了只在表单中选择的页面中加载JS和CSS文件,我想使用is\\u page()函数,将$page\\u selected变量作为参数传递。

 function my_custom_tooltip() {
    if (  is_page($page_selected) ) {
        wp_enqueue_style( \'custom_tooltip_frontend_css\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.css\') );
        wp_enqueue_script( \'custom_tooltip_frontend_js\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.js\'), array(\'jquery\'), \'\', true );
    }
} add_action(\'wp_enqueue_scripts\', \'my_custom_tooltip\');
不幸的是,在我的情况下,条件语句不能正确工作。是否有任何方法可以实现相同的结果,将用户在表单中选择的页面与当前显示的页面相匹配?

4 个回复
SO网友:Puneet Sahalot

如果$page_selected 返回包含页面标题的字符串,应该可以正常工作。我已经测试过了is_page() 接受页面标题、页面ID和slug。

如果您面临问题,最好将页面ID存储在数据库中并与一起使用is_page()

请参阅https://codex.wordpress.org/Function_Reference/is_page 有关可传递到此条件语句的可能参数的详细信息。

SO网友:AddWeb Solution Pvt Ltd

我做了一些很好的改变,希望这对你有帮助。请尝试以下代码:

function my_custom_tooltip() {
  wp_enqueue_style( \'custom_tooltip_frontend_css\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.css\') );
  wp_enqueue_script( \'custom_tooltip_frontend_js\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.js\'), array(\'jquery\'), \'\', true );
} 

if(is_page($page_selected)){
    add_action(\'wp_enqueue_scripts\', \'my_custom_tooltip\');
}
在这里,确保$page_selected.

NOTE: 您应该始终将脚本排入主题函数的队列。php文件-不是模板文件。模板文件在当时不是正确的位置。

您可以使用is_page() 多种形式,如:

// When any single Page is being displayed.
is_page();

// When Page 42 (ID) is being displayed.
is_page( 42 );

// When the Page with a post_title of "Contact" is being displayed.
is_page( \'Contact\' );

// When the Page with a post_name (slug) of "about-me" is being displayed.
is_page( \'about-me\' );

// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  
is_page( array( 42, \'about-me\', \'Contact\' ) );
Note: 在版本2.5中添加了阵列功能。

SO网友:Lucas Miranda

如果您在模板文件中运行此代码,它将正常工作,但如果此代码位于函数中。php或插件文件中,它会在debug.log:

PHP注意:调用了is\\u页面incorrectly. 运行查询之前,条件查询标记不起作用。在此之前,它们总是返回false。

在这种情况下,您可以使用template_redirect 动作钩,如上所述here.

SO网友:C C

未测试。。。但这样的操作应该可以获得当前显示的页面的名称(即slug):

function my_custom_tooltip() {
    global $post;
    if ( is_object( $post ) && $post->post_type==\'page\' ) {
        if ( $post->post_name == $page_selected ) {
            wp_enqueue_style( \'custom_tooltip_frontend_css\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.css\') );
            wp_enqueue_script( \'custom_tooltip_frontend_js\', plugins_url(\'custom-image-tooltip/custom-image-tooltip.js\'), array(\'jquery\'), \'\', true );
        }
    }
}
比较对象$page_selected 当然也希望它是“slug”格式。。。或者如果与页面标题比较,您可以使用$post->post_title 而不是$post->post_name.

注意,这是一个使用PHP类很有帮助的示例,可以避免使用全局变量($page_selected) 在该函数中。。。

相关推荐

如何在WooCommerce总价金额->ProductPages下增加保证金

我对ProductPage上的woocommerce价格金额有两个问题。第一个问题:我想在总价格金额下增加更多保证金,并按下“添加到卡”按钮我怎样才能做到这一点?(示例见下图)第二我只想显示总价。现在我得到了可变产品的最低价格,显示在产品标题下面,以及总价格金额。我只想显示总价。已经谢谢你了!