Задать вопрос
  • Что делать если не загружаются svg wordpress?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Попробую в function.php
    <?php
    
    add_filter( 'upload_mimes', 'svg_upload_allow' );
    
    # Добавляет SVG в список разрешенных для загрузки файлов.
    function svg_upload_allow( $mimes ) {
    	$mimes['svg']  = 'image/svg+xml';
    
    	return $mimes;
    }
    
    add_filter( 'wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 5 );
    
    # Исправление MIME типа для SVG файлов.
    function fix_svg_mime_type( $data, $file, $filename, $mimes, $real_mime = '' ){
    
    	// WP 5.1 +
    	if( version_compare( $GLOBALS['wp_version'], '5.1.0', '>=' ) ){
    		$dosvg = in_array( $real_mime, [ 'image/svg', 'image/svg+xml' ] );
    	}
    	else {
    		$dosvg = ( '.svg' === strtolower( substr( $filename, -4 ) ) );
    	}
    
    	// mime тип был обнулен, поправим его
    	// а также проверим право пользователя
    	if( $dosvg ){
    
    		// разрешим
    		if( current_user_can('manage_options') ){
    
    			$data['ext']  = 'svg';
    			$data['type'] = 'image/svg+xml';
    		}
    		// запретим
    		else {
    			$data['ext']  = false;
    			$data['type'] = false;
    		}
    
    	}
    
    	return $data;
    }
    
    # ограничиваем размер загружаемых файлов по типу
    add_filter( 'wp_handle_sideload'.'_prefilter', 'check_file_upload_size' );
    add_filter( 'wp_handle_upload'.'_prefilter', 'check_file_upload_size' );
    
    function check_file_upload_size( $file ){
    
    	// для SVG
    	if( false !== strpos( $file['type'], 'image/svg+xml') ){
    		$size_limit = 2048; // макс размер в KB
    	}
    	// для всех остальных картинок
    	elseif( false !== strpos( $file['type'], 'image') ){
    		$size_limit = 4096;
    	}
    
    	if( isset($size_limit) ){
    		$size_limit *= 1024;
    		if( intval($file['size']) > $size_limit )
    			$file['error'] = 'ERROR: Размер этого типа файлов не может превышать '. size_format( $size_limit );
    	}
    
    	return $file;
    }

    PS По умолчанию, загрузка файлов svg в wordpress запрещена по соображениям безопасности. Связано это с тем, что SVG файлы представляют из себя не просто изображения, а конкретный код. Благодаря этому изображения на сайте весят гораздо меньше, но зато нет гарантии, что они не содержат вредоносный код.
    Ответ написан
  • Почему переменная из header.php не видна в других файлах шаблона wordpress?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Переменные, заданные в одном файле, могут не быть доступны в других, если они не определены глобально.
    PS Что пытаешься решить ? Может через функцию передавать параметр ? set_transient() и add_option() тоже может быть решением.
    Ответ написан
    Комментировать
  • Telegram - как включить звук уведомления при упоминании в группах?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Тебе нужен MutationObserver . Div с упоминанием выглядит вот так
    <div class="dialog-subtitle-badge badge badge-22 mention mention-badge dialog-subtitle-badge-mention is-visible">@</div>

    Самое важное тут это mention-badge.
    PS Еще нужен Observer - наблюдает за изменениями в документе
    Ответ написан
  • Как в кастомной теме включить поддержку yoast seo?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    У меня были подозрение, в комментариях я их подтвердил...
    Вы думаете, что указав мета теги через yoast вы сразу же получите ваш сайт в выдаче в первых рядах. Так не бывает. Есть разные типы запросов. С точки зрения SEO запросы делятся на категории по частотности – параметру, который показывает, насколько часто запрос вводится в поисковик: низкочастотные (НЧ) – до 100 показов в месяц; среднечастотные (СЧ) – до 1000 показов в месяц; высокочастотные (ВЧ) – от 1000 показов в месяц. Это целая ниша SEO. За позиции в поиске нужно бороться. Также еще нужно краулерам ПС пройтись на вашем сайта (это тоже время). Также еще важно как давно создан домен, сколько авторитетных доменов ссылаются на него. Прошлое доменного имени и тд
    PS Единственное, что нужно проверить еще это метатег robots, он должен быть
    <meta name="robots" content="follow, index">
    Ответ написан
  • Как Использовать динамические шорткоды в Wordpress Title и Rank Math Seo?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Выводи title через кастомное поле (carbonfields.net или acf). В теме будет что-то типо
    </title><?php echo carbon_get_post_meta($page_id, 'crb_bts_title'); ?></title>

    Или еще легче
    </title>echo do_shortcode( '[crypto coins="BTC" type="text" show="price"]' );</title>
    Ответ написан
    Комментировать
  • Как вывести цену в гривне, а в админке в доларах (wordpress без woocommerce)?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Используй для цены кастомные поля (https://carbonfields.net/ или https://www.advancedcustomfields.com/). Или вообще возьми woocommerce и там уже все из коробки есть, остается только настроить.
    Ответ написан
    Комментировать
  • Как запретить скачивание файл по прямой ссылке?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    1) Установите и активируйте плагин, который позволит вам управлять доступом к файлам. Например, "Members" или "User Role Editor".
    2) Настройте прав доступа: Создайте пользовательскую роль, например, "модератор" и далее для доступа к этому файлу проверяйте есть ли роль "модератор у этого пользователя"
    Ответ написан
  • Почему белай полоса в хейдере?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    body.home.page-template-default.page.page-id-5390.theme-xstore.woocommerce-js.et_cart-type-1.et_b_dt_header-overlap.et_b_mob_header-overlap.wide.et-preloader-off.et-catalog-off.elementor-default.elementor-kit-10.elementor-page.elementor-page-5390.wpdiscuz_7\.6\.19.e--ua-blink.e--ua-opera.e--ua-webkit.et-preloader-hide
    {
    padding-top:0px;
    }


    У вас у body padding-top:10% стоит
    Ответ написан
    8 комментариев
  • Как решить проблему "Установка Windows на диск невозможна"?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Как я понял диск полностью пустой, удали все разделы и создай их заново. Все заработает
    PS Удаляешь все разделы. Создаешь 1 большой раздел . В этот момент винда предложит создать системные разделы , соглашаешься и все работает .
    Ответ написан
  • На каком движке создать такой сайт?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Используй то, в чем разбираешься
    Ответ написан
    1 комментарий
  • Как сделать анимацию плавнее?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Такой вариант подойдет ?
    let scene, camera, renderer;
    let path, tubeGeometry;
    const molecules = [];
    const moleculeCount = 2000;
    const moleculeGeometry = new THREE.SphereGeometry(0.05, 16, 16);
    const moleculeMaterial = new THREE.MeshBasicMaterial({ color: 0x3076e2 });
    const canvas = document.getElementById("myCanvas");
    const tubeRadius = canvas.offsetWidth / 176;
    const segmentCount = 400; // Увеличили количество сегментов для еще большей плавности
    const rotationAngle = Math.PI / 3.5; // 45 degrees in radians
    const speedCoefficient = 0.00005; // Еще медленнее движение
    let clock = new THREE.Clock();
    const fps = 60; // Частоту кадров оставляем на 60
    let interval = 1000 / fps;
    let lastTime = 0;
    
    function init() {
      // Устанавливаем сцену, камеру и рендерер
      scene = new THREE.Scene();
      scene.background = new THREE.Color(0xffffff);
      camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
      renderer = new THREE.WebGLRenderer({ canvas: canvas });
      renderer.setSize(600, 600);
    
      createOvalPath();
      createMolecules();
      updateCameraPosition();
    
      window.addEventListener("resize", onWindowResize, false);
      onWindowResize();
    
      animate(0);
    }
    
    function createOvalPath() {
      // Создаем эллиптическую трубу пропорциональную размеру canvas
      const canvasSize = Math.min(
        renderer.domElement.width,
        renderer.domElement.height
      );
      const a = canvasSize / 35;
      const b = canvasSize / 70;
      const points = [];
    
      for (let i = 0; i <= segmentCount; i++) {
        const angle = (i / segmentCount) * Math.PI * 2;
        const x = a * Math.cos(angle);
        const y = b * Math.sin(angle);
        const z = 0;
    
        const rotatedX = x * Math.cos(rotationAngle) - z * Math.sin(rotationAngle);
        const rotatedZ = x * Math.sin(rotationAngle) + z * Math.cos(rotationAngle);
    
        points.push(new THREE.Vector3(rotatedX - canvasSize / 80, y, rotatedZ));
      }
    
      path = new THREE.CatmullRomCurve3(points);
      tubeGeometry = new THREE.TubeGeometry(path, 400, tubeRadius, 16, true);
    }
    
    function createMolecules() {
      molecules.length = 0;
    
      for (let i = 0; i < moleculeCount; i++) {
        const molecule = new THREE.Mesh(moleculeGeometry, moleculeMaterial);
        scene.add(molecule);
        molecules.push({
          mesh: molecule,
          position: Math.random(),
          speed: Math.random() * 0.05 + 0.01 // Еще медленное движение
        });
      }
    }
    
    function updateCameraPosition() {
      const canvasSize = Math.min(
        renderer.domElement.width,
        renderer.domElement.height
      );
      camera.position.z = canvasSize / 33;
    }
    
    function onWindowResize() {
      const canvasSize = Math.min(window.innerWidth, window.innerHeight);
      renderer.setSize(canvasSize, canvasSize);
      camera.aspect = 1;
      camera.updateProjectionMatrix();
    
      createOvalPath();
      updateCameraPosition();
    }
    
    function animate(time) {
      requestAnimationFrame(animate);
    
      const delta = clock.getDelta();
    
      if (time - lastTime >= interval) {
        lastTime = time;
    
        molecules.forEach((molecule) => {
          molecule.position += molecule.speed * delta;
          if (molecule.position > 1) molecule.position -= 1;
    
          const pointOnPath = path.getPointAt(molecule.position);
    
          molecule.mesh.position.lerp(pointOnPath, 0.05);
        });
    
        renderer.render(scene, camera);
      }
    }
    
    init();
    Ответ написан
    Комментировать
  • Как реализовать подсказки при наборе в поиске WordPress?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Тебе нужна функция autosuggest для поиска. Можешь рассмотреть вариант для WP ElasticPress
    Ответ написан
  • Как сохранить названия файла с датой ffmpeg?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    @echo off
    for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set "DT=%%I"
    set "YY=%DT:~2,2%"
    set "YYYY=%DT:~0,4%"
    set "MM=%DT:~4,2%"
    set "DD=%DT:~6,2%"
    set "HH=%DT:~8,2%"
    set "MIN=%DT:~10,2%"
    set "SS=%DT:~12,2%"
    
    .\ffmpeg -f dshow -i video="USB2.0 HD UVC WebCam":audio="Набор микрофонов (Realtek(R) Audio)" "V_%YYYY%%MM%%DD%_%HH%%MIN%%SS%.mp4"
    Ответ написан
    Комментировать
  • Не могу зайти на страницу плагинов в адмике вп, что делать?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    У вас не полные полномочия на сайте ? Попробуйте включить дефолтную тему и выключить все плагины (через sftp) , проблему решает ?
    Ответ написан
    Комментировать
  • Как задать мета теги SEO конкретным записям на сайте WP?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    А чем SEO плагины не угодили ?
    Например Yoast SEO или Rank Math
    PS Сам пользовался раньше Yoast но перешел на Rank Math
    Ответ написан
    2 комментария
  • Как заставить gradient svg не дергаться при уменьшении и при увелечение?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    function changeSVGValuesPeriodically() {
      let height = 300;
      let decreasing = true; 
      const interval = setInterval(() => {
        console.log("Current height:", height);
    
        let gradientColor;
        if (height >= 0 && height < 100) {
          gradientColor = "#FF0000";
        } else if (height >= 100 && height < 200) {
          gradientColor = "#FF6600"; 
        } else {
          gradientColor = "#003822"; 
        }
    
        if (decreasing) {
          height -= 2;
          if (height <= 0) {
            decreasing = false;
          }
        } else {
          height += 2;
          if (height >= 300) {
            decreasing = true;
          }
        }
    
        const svgElement = document.querySelector('.line svg');
        const rectElement = document.querySelector('.line rect');
        const imgElement = document.querySelector('.img');
        svgElement.setAttribute('height', height);
        svgElement.setAttribute('viewBox', `0 0 10 ${height}`);
        const gradientElement = document.querySelector('#paint0_linear_1633_114613');
        gradientElement.querySelector('stop').setAttribute('stop-color', gradientColor);
        gradientElement.querySelector('stop').setAttribute('offset', height / 300);
        rectElement.setAttribute('height', height);
        imgElement.style.height = `${height}px`;
      }, 40); 
    }
    
    changeSVGValuesPeriodically();
    Ответ написан
    Комментировать
  • Как в вордпресс показывать в результатах поиска частичное совпадение слов?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Под твой запрос идеально вписывается это решение. Бесплатное при условии разворачивании на своем сервере бд Elasticsearch. https://ru.wordpress.org/plugins/elasticpress/#ins...
    Ответ написан
    Комментировать
  • Майнер в explorer.exe?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Поставь антивирус от доктор веба (например), видно же что он боится их (антивирусов, т.к. находят его) раз вставляет в хосты блок их
    Ответ написан
    1 комментарий
  • Сделать перенаправления или как избавиться от дублей?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Для того чтобы запретить индексацию GET параметров в robots.txt файле, вы можете использовать директиву "Disallow" с символом "?" для указания наличия GET параметров в URL.
    robots.txt:
    User-agent: *
    Disallow: /*?

    Символ "?" обозначает начало GET параметров в URL.

    Бонус:
    Чтобы запретить все get параметры:
    nginx conf:
    server {
        listen 80;
        server_name example.com;
    
        location / {
            if ($args) {
                return 403;  # Запретить доступ к страницам с GET параметрами
            }
            # Ваша дальнейшая конфигурация для обработки запросов
        }
    }

    Этот конфигурационный блок будет блокировать доступ к страницам с GET параметрами и возвращать ошибку 403 "Forbidden".
    PS Не забудь ребунтнуть nginx

    htaccess:
    RewriteEngine On
    RewriteCond %{QUERY_STRING} .+
    RewriteRule ^(.*)$ $1? [R=301,L]

    Этот блок будет перенаправлять любые URL с GET параметрами на тот же URL без параметров с кодом 301.
    Ответ написан