web-dev-qa-db-ja.com

カスタマイザ、コントロール変更時のプレビューURLの変更

私はウェブサイトのすべてのページをリストするドロップダウンコントロールを持っています。

ドロップダウンでページを選択すると、プレビューiframeがそのページに更新されます。

カスタマイザpreviewUrlを変更するには、以下の方法があります。

wp.customize.previewer.previewUrl( url )

しかし、私はこれをどのようにそしてどこで行うべきか正確に理解することができません。ドロップダウンコントロールのトランスポートはrefreshに設定されており、コントロール値が変わるたびにプレビューが自動的に更新されます。

おそらく、カスタマイザが自動的にプレビューを更新する前にpreviewUrlを変更することで解決するかもしれません。

あなたはこれをするために何か提案がありますか?前もって感謝します。

1
Virgo

移動するつもりです…あなたがtransport refreshを設定する代わりにテーマオプションthemeoption[id]...を持ち、代わりにそれを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関数を追加するだけです...これは、ドロップダウンコントロールが単一の数値の投稿IDを保存/投稿していることをある程度想定しています。

add_action('wp_ajax_get_preview_permalink','get_preview_permalink');
function get_preview_permalink() {
    $postid = $_GET['postid'];
    echo get_permalink($postid);
    exit;
}

テストされていないクレイジーな回避策が、それがトリックをやるかもしれないようです..?

0
majick

コントロールパネルから現在のURLを変更する予定がある場合は、これを試してください。wp.customize.previewer.previewUrl( url )

プレビューフレームからURLを変更したい場合は、これを試してください:wp.customize.preview.send( "url", url )


さらに、コントロールパネルから現在のプレビューURLを取得する方法は次のとおりです。wp.customize.previewer.previewUrl()

0
mj_azani