4

在我的主题的每一页上,用户都可以选择添加滑块。当他们这样做时,他们可以为滑块选择多个设置。这包括诸如幻灯片在更改之前将暂停多长时间、幻灯片在更改时转换需要多长时间以及它使用什么类型的转换等内容。

现在,如果我只是硬编码而不让用户选择滑块的选项,代码将如下所示:

<script>
jQuery(function(){

    jQuery('#camera_wrap_3').camera({
        height: '40%',
        thumbnails: true,
        time: 3500,
        fx: 'scrollBottom',
        transPeriod: 1200,
        autoAdvance: true,
        minHeight: '50px',
        mobileNavHover: false,
    });
});
</script>

将用户选择设置时创建的变量传递给上面的代码的正确方法是什么?

请记住,我希望能够使用 wp_enqueue 以正确的方式将该文件排入队列

4

2 回答 2

2

我假设这与您关于将变量传递给的问题有关wp_head- 如果您想从插件存储参数,Wordpress 提供两种(如果您使用多站点,则为三种)方法,具体取决于您的参数范围。

如果它特定于页面/帖子,那么您应该使用自定义字段 APIpostmeta将参数存储在表中。您可以使用和获取它,其中true/false 取决于您想要一个值数组还是一个值 - 如果它类似于“宽度”,您可能会将其设置为. 更多信息在这里 - http://codex.wordpress.org/Custom_Fieldsupdate_post_meta($post_id, $key, $data)get_post_meta($post_id, $key, $single)$singletrue

如果它适用于整个站点,那么您将其存储在表中的Options API中,如果找不到则返回where并检索它,否则将返回. 最后一个仅适用于多站点的选项也是选项 API 的一部分,并且使用和。更多信息在这里 - http://codex.wordpress.org/Options_APIoptionsupdate_option($key, $data)get_option($key, $default)$default$keyfalseupdate_site_option($key, $data)get_site_option($key, $default)

管理自定义字段(以及通过高级功能提供的选项)的绝佳选择是Advanced Custom Fields

假设这是每个帖子/页面,并且您正在使用 ACF 设置值,那么您可以编写一个挂钩来wp_head将这些字段拉入您的 Javascript。您可以将其放入主题中的functions.php文件中,或者如果您希望在更改主题时保留它,您可以使用自定义函数插件

// hooked to wp_head
function my_wp_head(){
    // get the current $post
    global $post;
    // get value or key "camera_time"
    $camera_time = get_post_meta($post->ID, "camera_time", true);

    // write result to javascript
    echo "<script>";
    echo "var cameraTime = {$camera_time};";
    // ... the rest of your javascript
    echo "</script>";
}
if (is_single()) // only include on single pages
    add_action( 'wp_head', 'my_wp_head' );
于 2012-11-08T23:48:06.800 回答
1

您可以为此使用扩展方法。

function foo (params) {
    //default values
    var settings = $.extend({
        'someKey': { k1: 'v1' },
        'otherKey':  'oTherValue'
    }, params);
     //use it 
    if (settings.someKey.k1 == 'v1') ...
    var bar = settings.otherKey;
}

然后只需从您的代码中调用它

foo({someKey: {k1: 'v2'}, otherKey: 'bla' });

我使用这种方法创建了一个简单的 jQuery 插件。一探究竟

于 2012-11-08T21:56:01.930 回答