Тема WordPress Divi - Якорная ссылка открывает Specifi c Toggle Tab - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь получить якорные ссылки для открытия вкладок на указанной странице c.

Решения, подобные найденному на https://jonathanbossenger.com/using-anchor-links-to-open-accordions-and-tabs-in-divi/, работают только тогда, когда якорная ссылка на той же странице, что и вкладки.

Я нашел другую ветку в стеке, посвященную этой проблеме, но в чате у меня окончательно решено решение, к которому у меня нет доступа ( Wordpress Divi Тема - Якорная ссылка открывает вкладку с переключателем ).

На их веб-сайте я вижу, что они смогли заставить его работать (https://www.elkodowntown.org/our-members/#member -tabs | 3 ).

Как я могу получить доступ к коду сайта Elko Downtown, чтобы найти окончательную версию JavaScript, приведенную ниже, чтобы она заработала?

  jQuery(function($) {
        $('.menu-item-179 a').on('click', function(event){
            tabScroll('.et_pb_tab_0');
            return false;
        });
        $('.menu-item-180 a').on('click', function(event){
            tabScroll('.et_pb_tab_1');
            return false;
        });
        $('.menu-item-181 a').on('click', function(event){
            tabScroll('.et_pb_tab_2');
            return false;
        });
        $('.menu-item-182 a').on('click', function(event){
            tabScroll('.et_pb_tab_3');
            return false;
        });
        $('.menu-item-183 a').on('click', function(event){
            tabScroll('.et_pb_tab_4');
            return false;
        });

    function tabscroll(target) {
        $("html, body").animate({ scrollTop: $('#member-tabs').offset().top }, 1000);
        setTimeout($('#member-tabs' + target + ' a').click(), 2000 );
    }

    $(function hash() {
        var hash = window.location.hash.replace('#', "");

        if (hash == '#shop') { tabscroll('.et_pb_tab_1'); }
        if (hash == '#service') { tabscroll('.et_pb_tab_0'); }
        if (hash == '#eat-drink') { tabscroll('.et_pb_tab_2'); }
        if (hash == '#arts-entertainment') { tabscroll('.et_pb_tab_3'); }
        if (hash == '#stay') { tabscroll('.et_pb_tab_4'); }
    });
});

1 Ответ

1 голос
/ 03 марта 2020

Каждая строка javascript, передаваемая через Интернет, видна при проверке браузера. Если все, что вам нужно сделать, это посмотреть, что они доработали, посмотрите ниже.

Однако, если вы используете WP и пытаетесь делать что-то с помощью JS / JQuery, я настоятельно рекомендую вам сначала изучить, как выполнять функции вне WP, и понять, что происходит, код, который вы берете. from не всегда будет соответствовать структуре / элементам вашей страницы, и вы всегда будете удивляться, почему что-то не работает.

Вот код, который делает это для них:


    function _setTab(){
        // get current hash value
        var curHash = window.location.hash.substr(1);
        // only continue if hash provided and scoped to member tabs
        if( !curHash || !curHash.match('member-tabs') ){ return false; }

        // split and int val tab num
        curHash = parseInt(curHash.split('|')[1]);

        // ignore if tab is current state
        if( curHash === window._tabSelected ){ return false; }
        // set current tab to window
        window._tabSelected = curHash;

        // add click event to tab selected
        switch(curHash){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
                jQuery('#member-tabs .et_pb_tab_'+curHash+' a').click();
            break;

            default:
                return false;
            break;
        }

        // scroll to tabs container
        _scrollToTabs();
    }

    // scroll to member tabs container with 50px offset
    function _scrollToTabs(){
        var oTabs = jQuery('#member-tabs');
        if( oTabs.length > 0 ){
            jQuery('html,body').animate({
                scrollTop: (oTabs.offset().top - 50)
            }, 1000);
        }
        return false;
    }

    // set falsey state for tab selected on load
    window._tabSelected = false;

    // we need to attach to window load because the tabs functions are initialized later in document
    jQuery(window).on('load', function(){
        // check for initial hash state
        _setTab();

        // add hash change window listener
        jQuery(window).on('hashchange', function(){
            _setTab()
        });

        // void submenu when we are in member section 
        var curPath = window.location.pathname;
        if( curPath.match('our-members') ){
            // only change hash and do not reload page
            jQuery('#menu-item-98 ul li a').on('click', function(e){
                e.stopImmediatePropagation();
                window.location.hash = jQuery(this).prop('hash');
                return false;
            });
        }
    });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...