Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wordpress的javascript中使用php_Php_Wordpress_Function_Date - Fatal编程技术网

在wordpress的javascript中使用php

在wordpress的javascript中使用php,php,wordpress,function,date,Php,Wordpress,Function,Date,我在名为custom.js的javascript(jquery)文件中获得了以下代码: blabla = new Date(2014, 06 - 1, 2); $('.days').countdown({ until: blabla, layout: '{dn} {dl}', 1.现在我希望用户能够更改上述日期。我创建了一个名为theme-options.php的主题选项页面 2.我使用functions.php中的链接到theme-op

我在名为custom.js的javascript(jquery)文件中获得了以下代码:

    blabla = new Date(2014, 06 - 1, 2);
        $('.days').countdown({
        until: blabla,
        layout: '{dn} {dl}',
1.现在我希望用户能够更改上述日期。我创建了一个名为theme-options.php的主题选项页面

2.我使用functions.php中的
链接到theme-options.php

3.这是theme-options.php:

<?php
add_action('admin_menu', 'director_create_menu');
function director_create_menu() {
add_submenu_page( 'themes.php', ' Theme Options',
'Theme Options', 'administrator', __FILE__,
'director_settings_page');
add_action( 'admin_init', 'director_register_settings' );
}
function director_register_settings() {
register_setting( 'director-settings-group', 'director_date' );
}

div class="wrap">
  <h2>Theme Settings</h2>
  <form id="landingOptions" method="post" action="options.php">
    <?php settings_fields( 'director-settings-group' ); ?>
    <table class="form-table">
<tr valign="top">
          <th scope="row">Date:</th>
          <td>
            <input type="text" placeholder="2014, 06 - 1, 2" name="director_date"
            value="<?php print get_option('director_date');
            ?>" />
          </td>
        </tr>
<p class="submit">
        <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
        </p>
      </form>
    </div>
    <?php } ?>
<?php require_once('js/custom.php'); ?>

日期:

index.php
中,您可以执行以下操作:

<?php $date = get_option('director_date'); ?>
<script type="text/javascript">var generated_date = '<?php echo $date; ?>';</script>

var生成日期=“”;
请确保在包含JavaScript之前执行此操作,以便引用刚刚创建的
生成的\u日期变量。

请查看。虽然表面上是为了翻译,但它允许您将PHP值传递给JS

编辑:

首先,确保您正在使用
wp\u enqueue\u脚本加载JS,因为您需要引用句柄。在
functions.php
中,您将拥有:

$date = get_option('director_date');
wp_enqueue_script('my-script', get_stylesheet_directory_uri() . 'js/my-script.js');
wp_localize_script('my-script', 'my_script_vars', array(
        'date' => $date
    )
);
wp\u localize\u脚本
采用三个参数:

  • 将变量对象传递到的脚本句柄。这应该与
    wp\u enqueue\u脚本中使用的句柄匹配
  • 要创建的变量对象的名称。您将使用此名称来引用JS中的对象
  • 要传递给对象的变量数组。这里我只是传递我们前面声明的
    $date
    变量,但是您显然可以传递任何您想要的
  • 然后在
    my script.js
    中,您可以非常简单地访问此对象:

    var $date = my_scripts_vars.date;
    alert($date); // Or do whatever you want with it
    

    这是行不通的:javascript是在客户端解释的,它无法访问服务器端的代码。您必须发出一个额外的请求(AJAX或类似的请求),或者需要以动态的方式(例如通过使用php)创建该javascript片段。我会选择第二种选择。创建一个php脚本,根据需要输出javascript,并用正确的内容标题发布。你能解释一下@arkascha是如何做到的吗?我做到了,不是吗?您可以通过php脚本创建javascript。这样javascript就包含了您所需要的值,因为它已经生成了。既然您在php级别拥有该值,那么您应该能够做到这一点。我做过很多次。您可以通过php创建任何类型的文件,而不仅仅是html标记。谢谢arkascha。我也做了同样的事情,但是我犯了一个错误。代码有问题。请看一下编辑后的答案。对不起,不,我无法在您的描述中找到从php生成动态javascript的位置。如果我没弄错的话,
    custom.js
    是一个静态文件。显然,静态文件中不能包含动态内容。一旦浏览器中有任何安全功能处于活动状态,这将无法正常工作。如今,大多数浏览器将不再执行内联javascript。这是有道理的。什么安全功能和浏览器?据我所知,您指的是W3C提案,但我的研究告诉我,对这一提案的支持只包括在最新的浏览器中,而且支持是对web服务器可选发送的特定标头的响应。这与“现在大多数浏览器都不会执行内联javascript[]非常非常不同”。@arkascha-请详细说明“现在大多数浏览器都不会执行内联javascript了。这很有意义。”虽然这一限制仅适用于浏览器的最新版本,但这并不意味着该声明不真实。幸运的是,现在大多数用户都会定期升级他们的软件,所以大多数用户都会使用这些最新版本。当然,这种行为可以通过http头进行控制。然而,这种控制并不是微不足道的,我发现在许多情况下,这导致了一种普遍的“允许所有人”政策,这是不可取的。内联脚本会打开一个安全线程,最安全的做法是不要再次打开该漏洞。这就是为什么我会反对这种解决方案。我认为困惑在于这些浏览器默认做什么。当然,用户可能会使用最升级版本的Firefox或Chrome访问我的网页,但除非我专门针对CSP设置了我的网站,否则他们不会公然拒绝加载任何内联脚本。wp_localize_脚本绝对是一条路要走。
    $date = get_option('director_date');
    wp_enqueue_script('my-script', get_stylesheet_directory_uri() . 'js/my-script.js');
    wp_localize_script('my-script', 'my_script_vars', array(
            'date' => $date
        )
    );
    
    var $date = my_scripts_vars.date;
    alert($date); // Or do whatever you want with it