1

我想将 jquery 函数与 post meta 选项联系起来,所以我在 PHP 标记内创建了一个带有 jQ​​uery 代码的 PHP 文件。

      <?php
      echo "
           function dynamicAdjust() {
             jQuery('#main-home').css('margin-top', jQuery(window).height());       
           }
       ";
       ?>

也许有更好的方法来创建带有后元选项的动态 PHP(如果有,请告诉我),但是这里的 jQuery 工作正常,我在我的 functions.php 中作为 javascript 文件排队,并且 jQuery 函数工作正常。

在 PHP 文件中包含 jQuery 的问题和全部意义在于,用户可以打开/关闭选项,例如,当我将代码包装在这样的 if 语句中时。

       <?php
         if(get_post_meta($post->ID, '_moon_full_static_area', true) == 'on'); {
            echo "
               function dynamicAdjust() {
               jQuery('#main-home').css('margin-top', jQuery(window).height());     
               }
             ";
            }
        ?>

这给了我这个错误致命错误:在我的目录中调用未定义的函数 get_post_meta()..

好的,所以根据消息,很明显它没有将 get_post_meta 视为一个函数,我知道启用 post_meta 的任何东西都连接到数据库,我只是不确定除了将脚本排入队列之外我还需要做什么?有任何想法吗?

PS ..在 WordPress 函数文件中包含 JS(使用 PHP)的最佳实践我遇到了这个,这是我要找的吗?

4

1 回答 1

0

将 PHP 值传递给 Javascript 文件的标准方法是通过wp_localize_script.
另请参阅 WordPress 答案

add_action( 'wp_head', 'localize_script_so_17497763' );

function localize_script_so_17497763() 
{ 
    // Maybe check for `is_single()` or other Conditional Tag

    // Check post meta 
    global $post;
    $get_meta = get_post_meta( $post->ID, '_moon_full_static_area', true );
    $meta_value = ( $get_meta == 'on' ) ? 'on' : 'off';

    // Build localization array to be passed
    $localize_array = array(
            'moon'    => $meta_value,
            'post_id' => $post->ID,
            'title'   => $post->post_title,
    );

    wp_enqueue_script( 'my-file', plugin_dir_path( __FILE__ ).'my-file.js', array('jquery') );
    wp_localize_script( 'my-file', 'wplocal', $localize_array );
}

然后,在my-file.js

console.log( wplocal.moon );
console.log( wplocal.post_id );
console.log( wplocal.title );

请参阅:PHP 中 var_dump 或 print_r 的 JavaScript 等效项是什么?

于 2013-07-05T23:21:33.263 回答