J'ai un contrôle déroulant qui répertorie toutes les pages du site.
Lorsque je sélectionne une page dans la liste déroulante, je mets à jour l’aperçu iframe sur cette page.
Il existe la méthode suivante pour modifier le personnalisateur previewUrl
wp.customize.previewer.previewUrl( url )
Mais je ne peux pas réaliser comment et où je devrais faire cela exactement. Le transport de la liste déroulante a le transport défini sur refresh
et l'aperçu s'actualise automatiquement à chaque modification de la valeur du contrôle.
Peut-être qu'une solution pourrait être de changer la previewUrl
avant que le personnalisateur actualise automatiquement l'aperçu.
Avez-vous des suggestions à faire? Merci d'avance.
Allez-y ... supposons que vous avez une option de thème themeoption[id]
... au lieu de définir transport refresh
, définissez-la sur postMessage
et ajoutez ensuite ce code pour créer un rappel qui obtient d'abord l'URL de la page via AJAX puis renvoie cela à la previewUrl
comme vous l’avez mentionné avant de rafraîchir ...
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();
}
}
});
});
});"
}
}
Ensuite, ajoutez simplement une petite fonction AJAX pour renvoyer le permalien ... Cela revient à supposer que le contrôle déroulant enregistre/publie un seul ID d'article numérique.
add_action('wp_ajax_get_preview_permalink','get_preview_permalink');
function get_preview_permalink() {
$postid = $_GET['postid'];
echo get_permalink($postid);
exit;
}
Contournement fou non testé mais il semble que cela pourrait faire l'affaire ..?
Essayez-le lorsque vous envisagez de modifier l'URL actuelle à partir du panneau de commandes: wp.customize.previewer.previewUrl( url )
ou essayez celui-ci pendant que vous avez l'intention de changer l'URL du cadre de prévisualisation: wp.customize.preview.send( "url", url )
De plus, voici comment obtenir l'URL de prévisualisation actuelle à partir du panneau de commandes: wp.customize.previewer.previewUrl()