定制器,在控件更改时更改预览url

时间:2016-01-06 作者:Virgo

我有一个下拉控件,列出了网站的所有页面。

当我在下拉列表中选择一个页面时,我会将预览iframe更新到该页面。

有以下方法可以更改自定义程序previewUrl

wp.customize.previewer.previewUrl( url )

但我不知道我该怎么做,在哪里做。下拉控件的传输设置为refresh 每次控件值更改时,预览将自动刷新。

也许解决办法是改变previewUrl 在自定义程序自动刷新预览之前。

你对此有什么建议吗?提前谢谢。

2 个回复
最合适的回答,由SO网友:majick 整理而成

我要试一试。。。假设您有一个主题选项themeoption[id]... 而不是设置传输refresh, 将其设置为postMessage 相反,然后添加此代码以创建回调,该回调首先通过AJAX获取页面URL,然后将其发送回previewUrl 正如您在刷新之前提到的。。。

add_action(\'customize_preview_init,\'preview_override_loader\');
function preview_override_loader() {
    add_action(\'wp_footer\',\'preview_override_script\');
    function preview_override_script() {
        $adminajax = admin_url(\'admin-ajax.php\');
        echo "wp.customize(\'themeoption[id]\',function(value) {
            value.bind(function(to) {
                console.log(\'Posted ID: \'+to); /* debug point */
                jQuery.get({url:\'".$adminajax.php"\', 
                    {action:\'get_preview_permalink\',postid:to}, 
                    function(data) {
                        if (data) {
                            console.log(\'Permalink: \'+data); /* debug point */
                            wp.customize.previewer.previewUrl(data);
                            wp.customize.previewer.refresh();
                        }
                    } 
                });
            });
        });"
    }
}
然后只需添加一个小的AJAX函数来返回永久链接。。。这在某种程度上是假设下拉控件正在保存/发布单个数字post ID。

add_action(\'wp_ajax_get_preview_permalink\',\'get_preview_permalink\');
function get_preview_permalink() {
    $postid = $_GET[\'postid\'];
    echo get_permalink($postid);
    exit;
}
未经测试的疯狂解决方案,但似乎可以解决问题。。?

SO网友:mj_azani

当您计划从“控制面板”更改当前URL时,请尝试此选项:wp.customize.previewer.previewUrl( url )

或者在您打算更改预览框架中的URL时尝试此选项:wp.customize.preview.send( "url", url )

此外,以下是如何从控制面板获取当前预览URL:wp.customize.previewer.previewUrl()