• PHP Class: file_get(put)_contents. Как сохранять значения формы в разные файлы?

    AGorbunoff
    @AGorbunoff Автор вопроса
    Учусь:)
    Спасибо всем, кто откликнулся и отдельное спасибо Автору кода Webdevkin.

    Упустил из внимания базовый вывод переменной из формы!
    $_POST["utm"];

    В итоге, оконцовка class Admin получилась такой:
    // Сохраняем настройки в файл
        public function save($settings) {
            $utm = $_POST["utm"];
            file_put_contents($this->basePath . 'config/utm/'.$utm.'.json', json_encode($settings));
            $this->setSettings();
        }


    И при каждом сохранении формы, создается новый файл .json в папке: utm

    5eac605c997f1839363251.jpeg
    Ответ написан
    Комментировать
  • Ребятки, нужен плагин для продажи видеокурсов на wordpress, правильно ли я мыслю?

    AGorbunoff
    @AGorbunoff
    Учусь:)
    Просто, присваивайте роль пользователя при покупке товара или продавайте сам доступ и при этом меняйте роль оплатившего, например так:

    add_action( 'woocommerce_order_status_completed', 'change_role_on_pro' );
    function change_role_on_pro( $order_id ) {
        $order = wc_get_order( $order_id );
        $items = $order->get_items();
    
        $products_to_check = array( '3420' ); // id товара, при оплате которого меняется роль
    
        foreach ( $items as $item ) {
            if ( $order->user_id > 0 && in_array( $item['product_id'], $products_to_check ) ) {
            	$user = new WP_User( $order->user_id );
    
            	// заменить роль
            	$user->remove_role( 'customer' );
            	$user->remove_role( 'subscriber' );
            	$user->add_role( 'clientpro' );
    
                // окончание цикла
                break;
        	}
        }
    }


    Теперь, с помощью любых плагинов из категории Access настраиваете ограничения на просмотр контента или целых страниц/разделов. Отличное решение плагин: Toolset Types Access
    Ответ написан
    2 комментария
  • Как создать сайт-конструктор?

    AGorbunoff
    @AGorbunoff
    Учусь:)
    Самое быстрое и простое решение + неограниченные возможности кастомизации и дальнейшего совершенствования даст связка:
    1. Сайт на базе CMS WordPress;
    2. Плагин Toolset Types (или программирование на PHP);
    3. Скачать персонажей в стоках в векторном формате.


    Как реализовать

    Просто берем нашего персонажа в формате Illustrator и разбиваем на слои - каждому слою присваиваем id (имя).

    Экспортируем персонажа в файл SVG. В плагине Toolset Types создаем представление Views такое как задумано в нашей идее. Например, отображать определенные части персонажа в зависимости от значений фильтра или параметра URL или как результат заполненной формы.

    Предварительно под слои SVG создать тип записи (персонаж) и групповое поле из индивидуальных полей (например: слой картинки, url, еще какой-то параметр). Групповое поле - это часть персонажа, например правая рука. Получается тип записи: "персонаж" - это результат отображения групповых полей привязанных к этому типу записи. Где каждое поле это слой нашего общего SVG.

    Остается реализовать идею и запрограммировать отображение частей персонажа в представлении Toolset Types в зависимости от нужных условий и параметров. Функции плагина можно заменить коддингом в PHP. Так же: создаем тип записи: персонаж и к этому типу произвольные поля, в каждом из которых отдельный слой SVG.

    Таким макаром можно пилить любые визуальные решения: конструкторы домов, персонажей, карты, планировки зданий, учет аренды торговых центров, районы муниципального хозяйства и любые визуальные идеи.

    Дальше больше - развивать и наращивать функционал. Успехов!
    Ответ написан
    5 комментариев
  • Как в $post_id передать нужную запись для события cron и обновления полей update_post_meta по расписанию?

    AGorbunoff
    @AGorbunoff Автор вопроса
    Учусь:)
    Итоговый сниппет, который обновляет произвольные поля текущей записи по событию cron без необходимости жать кнопку "обновить".

    Спасибо nokimaro и yarovikov за поддержку!


    Это позволяет вносить любые изменения в запись по расписанию.

    // регистрируем интервал 24 часа
    add_filter( 'cron_schedules', 'cron_24' );
    function cron_24( $schedules ) {
      $n = rand(0,55);
      $schedules['rand_24'] = array(
        'interval' => 60 *  $n  * 24,
        'display' => 'раз в сутки'
      );
      return $schedules;
    }
    
    // регистрируем событие 24_event
    add_action( 'wp', 'to_cron_24' );
    function to_cron_24() {
      if ( ! wp_next_scheduled( '24_event' ) ) {
        wp_schedule_event( time(), 'rand_24', '24_event');
      }
    }
    
    // добавляем функцию к хуку события
    add_action( '24_event', 'updated_meta' );
    function updated_meta() {
    
       // получаем массив записей post
        global $post;
    
        $args = array(
         'post_type' => 'post'
          );
    
        $posts = get_posts( $args );
    
        foreach( $posts as $post ){
          setup_postdata($post);  // устанавливаем данные	
        
          // какая-то задача внутри цикла, например ключевые фразы
          $keywords = 'ключевые фразы для серии постов';
        
          $post_id = get_the_ID(); // получаем ID текущего поста в цикле
        
          //  обновляем произвольное поле раз в сутки в случайное время
          update_post_meta( $post_id, 'allkeywords', $keywords );    
    
      }
    }
    Ответ написан
    Комментировать
  • Как спарсить выдачу Яндекс.Карт?

    AGorbunoff
    @AGorbunoff
    Учусь:)
    Та еще задача: корректно извлекать данные рейтинга организации. Задал вопрос поддержке Яндекса, как это сделать не нарушая правил платформы. Жду ответ и опубликую здесь.

    А пока, есть простое решение, извлекать данные посредством PHP шоркода:

    <?php 
    
    function rating_function($atts) {
    extract(shortcode_atts(array(
    
      // вставляем ссылку на карточку организации в Яндекс Справочике как есть
      "url" => 'https://yandex.ru/maps/org/<---id организации--->',
    ), $atts));
      
      $content = file_get_contents($url);
        
    	// определяем начало необходимого фрагмента кода, до которого мы удалим весь контент
    	$pos = strpos($content, '<div class="orgpage-reviews-view__rating-score">');
     
    	// удаляем все до нужного фрагмента
    	$content = substr($content, $pos);
     
    	// находим конец необходимого фрагмента кода
    	$pos = strpos($content, '</div>');
     
    	// отрезаем нужное количество символов от конца фрагмента
    	$content = substr($content, 0, $pos);
        
      echo $content;
    	
    	}
    
    add_shortcode('rating', 'rating_function');
    
    ?>


    Получаем рейтинг в числовом значении и вставляем полученный шорткод куда нужно на сайте: [rating].

    P.S.: Только функцию нужно запускать как можно редко;) дабы избежать нагрузки, желательно через периодическое обновление кэша, например, посредством curl закрывая соединение curl_close(); или каждый раз вызывая форму запроса данных в ручную.

    Здесь, предлагается одно из решений посредством curl.
    Ответ написан
    4 комментария