• Ajax-запрос к api vk для получения страны региона города?

    @WQP
    Документация по vk - https://vk.com/dev/manuals
    Документация по ajax - https://jquery-docs.ru/jQuery.ajax/
    Ответ написан
    Комментировать
  • Как в JS присвоить класс при событии onclick?

    Stalker_RED
    @Stalker_RED
    Можно так: https://jsfiddle.net/j2vfr53m/
    Но если у вас подключен jQueryUi, то там есть готовые табы: https://jqueryui.com/tabs/
    Ответ написан
    Комментировать
  • Как сделать Ajax регистрацию Wordpress бе плагинов?

    BBoyJuss
    @BBoyJuss
    WordPress, интерфейсы и все вытекающие
    Вот, взял кусок кода отсюда WordPress AJAX Login And Register Without A Plugin
    <?php
    
    function ajax_auth_init(){
    
        wp_register_script('ajax-auth-script', get_template_directory_uri() . '/js/ajax-register-script.js', array('jquery') );
        wp_enqueue_script('ajax-auth-script');
    
        wp_localize_script( 'ajax-auth-script', 'ajax_auth_object', array(
            'ajaxurl' => admin_url( 'admin-ajax.php' ),
            'redirecturl' => home_url(),
            'loadingmessage' => __('Sending user info, please wait...')
        ));
    
        // Enable the user with no privileges to run ajax_register() in AJAX
        add_action( 'wp_ajax_nopriv_ajaxregister', 'ajax_register' );
    }
    
    // Execute the action only if the user isn't logged in
    if (!is_user_logged_in()) {
        add_action('init', 'ajax_auth_init');
    }
    
    function ajax_register(){
    
        // First check the nonce, if it fails the function will break
        check_ajax_referer( 'ajax-register-nonce', 'security' );
    
        // Nonce is checked, get the POST data and sign user on
        $info = array();
        $info['user_nicename'] = $info['nickname'] = $info['display_name'] = $info['first_name'] = $info['user_login'] = sanitize_user($_POST['username']) ;
        $info['user_pass'] = sanitize_text_field($_POST['password']);
        $info['user_email'] = sanitize_email( $_POST['email']);
    
        // Register the user
        $user_register = wp_insert_user( $info );
    
        if ( is_wp_error($user_register) ){
            $error  = $user_register->get_error_codes() ;
    
            if(in_array('empty_user_login', $error))
                echo json_encode(array('loggedin'=>false, 'message'=>__($user_register->get_error_message('empty_user_login'))));
            elseif(in_array('existing_user_login',$error))
                echo json_encode(array('loggedin'=>false, 'message'=>__('This username is already registered.')));
             elseif(in_array('existing_user_email',$error))
                echo json_encode(array('loggedin'=>false, 'message'=>__('This email address is already registered.')));
            } else {
                auth_user_login($info['nickname'], $info['user_pass'], 'Registration');
            }
    
        die();
    }

    jQuery(document).ready(function($) {
    
        $('#register .submit_button').on('click', function(event) {
            var action   = 'ajaxregister';
                username = $('#signonname').val();
                password = $('#signonpassword').val();
                email    = $('#email').val();
                security = $('#signonsecurity').val();
    
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: ajax_auth_object.ajaxurl,
                data: {
                    'action': action,
                    'username': username,
                    'password': password,
                    'email': email,
                    'security': security
                },
                success: function (data) {
                    $('.status').text(data.message);
    
                    if (data.loggedin == true) {
                        document.location.href = ajax_auth_object.redirecturl;
                    }
                }
            });
    
            event.preventDefault();
        });
    });
    Ответ написан
    7 комментариев
  • Как лучше сделать связь записей в CMS WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Advanced Custom Fields штука хорошая и удобная, но на больших сайтах со сложным контентом - жутко медленная. Если нужны именно кросс-связи между объектами (post types, users) - есть отличный плагин Posts-to-Posts. Ну и кастомные таксономии.

    Грубо говоря, логика такая:
    - все что похоже на самостоятельный объект со своей моделью -> custom post type
    - любые "поля" / даполнительные данные, по которым нужна агрегация, сортировка, фильтрация и тд -> custom taxonomy
    - любые поля, которые просто дают доп.инфу -> custom meta (postmeta, usermeta и т.д.)
    - у ACF у полей Relationship есть галочка "Загрузить значение основываясь на терминах записи и обновить термины записи при сохранении" - обязательно использовать ее
    - если нужно связать объекты напрямую - Posts-to-Posts.

    Например, есть событие (CPT), есть место/локация (CPT), есть пользователи. Есть таксономии страна/город, тип события. С помощью Posts-to-Posts связываем между собой событие и место, а также к событию привязываем несколько пользователей (например, организаторы события), и у события и у места есть таксономия страна/город. Таксономия тип события релевантна только для событий. Получается стройная и гибкая, расширяемая схема. И главное - это все быстро работает, никаких запросов по meta_key. А место ACF в этой схеме - например, для локации это адрес, карта, контакты, ссылка на сайт/соцсети, фотогалерея и тд. Для события - приглашение, расписание, фотографии и видео, дата и время проведения события и тд.

    Я описал на своем примере, но переложить логику на компании / лица не составит труда.
    Ответ написан
    Комментировать
  • Изменение стиля при помощи javascript

    Mithgol
    @Mithgol
    Начнём с того, что раз уж речь идёт о переключении классов, то уместно сразу все стили записать в CSS:
    .bImg { /* сюда вписываем стиль обычного div */ }
    .vImg { /* сюда вписываем стиль div, жмякнутого мышою */ }
    
    Для элементов <div> после этого достаточно указывать классы (class="..." вместо style="...").

    Затем при помощи библиотеки jQuery можно немало упростить себе задачу.

    Во-первых, можно сделать проще HTML-код:
    1. Не придётся вписывать в него обработчики onclick, потому что они будут назначены позже, джаваскриптом.
    2. Не придётся и вписывать в него id, так как jQuery исполняет обработчики в контексте элементов: this указывает в обработчике на жмякнутый элемент.
    Было так:
    <div id="1" style="b-img" onclick="kodimg(id)">...</div>
    <div id="2" style="b-img" onclick="kodimg(id)">...</div>
    <div id="3" style="b-img" onclick="kodimg(id)">...</div>
    <div id="4" style="b-img" onclick="kodimg(id)">...</div>
    <div id="5" style="b-img" onclick="kodimg(id)">...</div>
    

    Стало так:
    <div class="bImg">...</div>
    <div class="bImg">...</div>
    <div class="bImg">...</div>
    <div class="bImg">...</div>
    <div class="bImg">...</div>
    

    Во-вторых, желаемое достигается простым JS-кодом для jQuery:
    $(function(){
       // после загрузки документа назначаем обработчики событий:
       $('div.bImg').click(function(){
          // в обработчике делаем две вещи:
          // 1) находим предыдущий жмякнутый div, отменяем жмякнутость
          $('div.vImg').removeClass('vImg').addClass('bImg');
          // 2) свежежмякнутому div придаём жмякнутость
          $(this).removeClass('bImg').addClass('vImg');
       });
    });
    
    Ответ написан
    2 комментария