私はウェブサイトのすべてのページをリストするドロップダウンコントロールを持っています。
ドロップダウンでページを選択すると、プレビューiframeがそのページに更新されます。
カスタマイザpreviewUrl
を変更するには、以下の方法があります。
wp.customize.previewer.previewUrl( url )
しかし、私はこれをどのようにそしてどこで行うべきか正確に理解することができません。ドロップダウンコントロールのトランスポートはrefresh
に設定されており、コントロール値が変わるたびにプレビューが自動的に更新されます。
おそらく、カスタマイザが自動的にプレビューを更新する前にpreviewUrl
を変更することで解決するかもしれません。
あなたはこれをするために何か提案がありますか?前もって感謝します。
移動するつもりです…あなたが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;
}
テストされていないクレイジーな回避策が、それがトリックをやるかもしれないようです..?
コントロールパネルから現在のURLを変更する予定がある場合は、これを試してください。wp.customize.previewer.previewUrl( url )
プレビューフレームからURLを変更したい場合は、これを試してください:wp.customize.preview.send( "url", url )
さらに、コントロールパネルから現在のプレビューURLを取得する方法は次のとおりです。wp.customize.previewer.previewUrl()