如何在wp_postmeta的自定义字段上有条件地加载脚本?

时间:2015-07-26 作者:RubenGeert

我正试图整理一些已经运行了很长时间的代码。具体来说,我过去常常在header.php 我正试图将其转变为functions.php.

应仅为中具有特定值的页面加载其中一个脚本wp_postmeta. 准确地说,当且仅当此表具有true 对于meta_key "mathjax", 应加载mathjax脚本。

在里面header.php 我用过

function my_init() {
    if (!is_admin()) {
        // REGISTER/ENQUEUE OTHER SCRIPTS...
        $mathjax = get_post_meta($post->ID,\'mathjax\',true);
            if($mathjax == \'y\'){
                wp_enqueue_script(\'mathjax\');
            }
    }
}

add_action(\'init\', \'my_init\');
现在,此代码在中不起作用functions.php 因为$post 未定义。我还能把代码移到functions.php 如果是这样的话,我怎样才能让它工作呢?

1 个回复
SO网友:websupporter

EDIT:如果在函数中使用$post,当然必须定义它:

function xyz(){
    global $post;
    //Your code
}
Initial answer, might help others:在我看来,你并没有在一个动作中使用它,或者如果是这样的话,你会提前使用它。它应该在“init”操作中工作。所以你可以这样做

<?php
add_action( \'init\', \'enqueue_conditionally\' );
function enqueue_conditionally(){
    $mathjax = get_post_meta( get_the_ID(),\'mathjax\',true);
    if($mathjax == \'y\'){
        wp_enqueue_script(\'mathjax\');
    }
}
?>
参考号:https://codex.wordpress.org/Plugin_API/Action_Reference/init

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。