仅在自定义帖子类型的子页面上将脚本入队

时间:2020-02-06 作者:CUH

我想在两种不同的自定义帖子类型的子页面上排队一个脚本。自定义贴子类型命名为“Foods”,贴子id为10000,另一个命名为“Drinks”,贴子id为20000。子页面有一段/food//drink/ 而父母有鼻涕虫/foods//drinks/.

我的functions.php 文件如下所示,但它在所有页面上显示脚本,而不仅仅是自定义帖子类型的子页面。我做错了什么?

function addScript() {
  global $post;

  if ($post->post_parent_in(array(\'10000\',\'20000\'))) {
    wp_enqueue_script(\'load_script\');
  }
}

addScript();

1 个回复
SO网友:Mayeenul Islam

问题

您共享的代码有一些问题:首先,调用这样的函数在WordPress的引导过程中不起作用,并且无法在必要的位置和时间获取必要的值,因此条件可能不会像您预期的那样起作用。

Solution: 将函数挂钩到适当的挂钩上,以及wp_enqueue_scripts 是这样一个用于排队脚本的挂钩。

您使用$post->post_parent_in 脱离上下文。post_parent_in 是的属性WP_Query() 类,该类在全局$post 对象

Solution: 相反,你有post_parent 输入要比较的必要值。

试用以下代码[技术上]将排队myscript 仅在子页面上。内联注释将指导您了解某些行的用途。(未彻底测试)

/**
 * My Custom Script for Child Pages only.
 */
function wpse357977_custom_script() {
    // If not on the detail page, bail out.
    if(! is_singular()) {
        return;
    }

    global $post;
    // If not on my Custom Post Type, bail out.
    if(\'mycpt\' !== $post->post_type) {
        return;
    }


    // \'0 !==\' means only on the child pages.
    if( 0 !== $post->post_parent) {
        wp_register_script(\'myscript\', get_template_directory_uri() .\'/myscript.js\', array(), \'wpse357977\', true);
        wp_enqueue_script(\'myscript\');
    }

}

add_action( \'wp_enqueue_scripts\', \'wpse357977_custom_script\' );

相关推荐

如何将父主题的unctions.php中使用的Required()重写到子主题

我已经为一个主题创建了一个子主题,除了函数中需要一些文件外,一切都很好。父主题的php,我想从子主题重写它。他们使用了get_template_directory_uri();而不是get_stylesheet_directory_uri();. 所以它并没有覆盖它。函数中使用的代码。php是:require( get_template_directory() .\'/inc/custom-functions.php\' ); 我无法更改父主题或从子主题中取消挂钩。使用子进程的最佳解决方案是什么