web-dev-qa-db-fra.com

Personnalisez, changez l'aperçu de l'aperçu quand un contrôle change

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.

1
Virgo

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 ..?

0
majick

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()

0
mj_azani