仅在特定父级的子页面上执行的Java脚本

时间:2016-05-30 作者:Megan

WordPress还不太熟悉,所以抱歉,这是一个显而易见的问题!

我试图在WordPress站点上执行一些JavaScript,但只在特定父页面的子页面上执行—因此,我举了一个例子。com/books,我希望脚本在示例上运行。com/books/foo,例如。com/books/bar,例如。com/books/wee等等。我不想让它在示例上运行。com/书籍。

我知道我可以在每个单独的页面上添加脚本,但我有其他人编辑该网站,他们可能会添加新书子页面,而他们在添加Javascript时不会感到舒服。

有什么解决方案吗?

2 个回复
SO网友:Rarst

您并没有完全介绍您已经走了多远,以及您是否熟悉WP排队过程的基本知识。

以父部分I为重点,基本代码如下:

add_action( \'wp_enqueue_scripts\', function () {

    if ( is_page() && in_array( $book_page_id, get_post_ancestors( get_the_id() ) ) ) {

        // enqueue stuff
    }
} );
在您的示例中,您只有一个级别,可能只是为了检查post_parent 但对于嵌套情况更多的情况,检查祖先会更彻底。

SO网友:Sumit

如果您正在寻找使用slug ofbooks 页我编写了一个小函数来检查它是否是任何给定页面的子页面。

您可以使用它有条件地将JavaScript排队。

function wpse_228256_is_child_of($page) {
    $current_post = get_post();

    //First check if it is child of any page to skip the processing on other parent pages/posts
    if ( !empty($current_post->post_parent) ) {
        $target_page = get_page_by_path($page); //Now get the target page
        $top_parent = array_pop( get_post_ancestors( $current_post ) ); //Get the top parent
        if (isset($target_page->ID) && $target_page->ID == $top_parent) {
            return TRUE;
        }
    }

    return FALSE; //Return false for everything else 
}
现在,您可以使用它将脚本排队到给定父页面的子页面上。

示例:-

if (wpse_228256_is_child_of(\'books\')) {
    add_action(\'wp_enqueue_scripts\', function() {
        wp_enqueue_script($handle, $src, $deps, $ver, $in_footer);
    });
}
或者如果您没有js文件,只想打印几行head

if (wpse_228256_is_child_of(\'books\')) {
    add_action(\'wp_head\', function(){ ?>
        <script type="text/javascript">
            alert(\'I am child page of books\');
        </script><?php
    });
}