Задать вопрос
  • Как в библиотеке медиафайлов вывести id картинки?

    Tolly
    @Tolly Автор вопроса
    Вот решение, которое я искал:

    # Изображение вставляем по кнопке Добавить медиафайл и оформляем как шорткод
    add_filter( 'image_send_to_editor', 'replace_image_editor', 10, 8 );
    function replace_image_editor( $html, $id, $caption, $title, $align, $url, $size, $alt ){
      $html='[image id="' . $id . '"]';
      return $html;
    }


    # получаем url:
    $url = wp_get_attachment_url($id);

    Вывести ID в медиатеке, можно так:
    add_filter( 'attachment_fields_to_edit', 'media_hacks_attachment_field_to_edit', 10, 2 );
    function media_hacks_attachment_field_to_edit( $form_fields, $post ){
    	$form_fields[] = array(
    		'value' => $post->ID,
    		'label' => 'ID',
    		'input' => 'html',
    		'html'  => "<input type='text' class='text' readonly='readonly' name='attachments[$post->ID]' value='" . $post->ID . "' /><br />"
    	);
    	return $form_fields;
    }
    Ответ написан
    Комментировать
  • Как собрать все избражения в одну папку?

    вывести все медиафайлы:
    SELECT * FROM `wp_postmeta` WHERE `meta_key`='_wp_attached_file'

    Вам наверно надо скрипт писать, запросить из базы, все файлы, и с помощью регулярных выражений менять путь для каждого файла в базе
    Ответ написан
    Комментировать
  • Как правильно настроить переадресацию при переносе сайта на Wordpress?

    Лучше пропишите в файле 20 строк, чем устанавливать плагин, который мусорит в базе.
    Если бы у Вас был nginx, наверно проще было бы через плагин.

    Redirect 301 /old/old.php /new/new.php
    RewriteRule ^news/new.html /new.html [L,R=301]
    ничем не отличаются, так что без разницы

    У Вас в примере "\" надо заменить на "/"
    Ответ написан
    Комментировать
  • Почему используется вся оперативная память?

    Скорее всего происходит кеширование, вот вся свободная память и переходит в кеш.
    Чтобы было много памяти переходите на nginx )
    Ответ написан
    Комментировать
  • Почему не добавляется переменная в query_vars?

    query_vars - это что за хук? Свой? Он работает, проверяли?
    Ответ написан
  • Wordpress: при пагинации не найдена вторая страница. Как исправить?

    Из своего черновика скопировал, поправите как надо.

    <?php
    if ( get_query_var('paged') ) $paged = get_query_var('paged');
    elseif ( get_query_var('page') ) $paged = get_query_var('page');
    else $paged = 1;
    
    $args = array(
        'paged' => $paged,
    		'post_type' => 'post',
    		'posts_per_page' => 12,				    
    		'orderby' => 'modified',	# сортировка по дате изменения поста
    );
    
    $custom_query = new WP_Query( $args );
    if ( $custom_query->have_posts() ) { 
      while( $custom_query->have_posts() ) {	$custom_query->the_post();
      	the_title();
      } 
       
      if ($custom_query->max_num_pages > 1) { // хак для правильной работы пагинации
          $orig_query = $wp_query;
          $wp_query = $custom_query;
    
    			// Пагинация
    			the_posts_pagination(array(
    				'prev_text' => (''),
    				'next_text' => (''),
    				'end_size'  => 1,
    				'mid_size'  => 2
    			));
    
          $wp_query = $orig_query; // возвращаем дефолтное значение
      }
      wp_reset_postdata(); // сброс запроса
    }	?>
    Ответ написан
    Комментировать
  • Как отключить кеширование шаблонов в wordpress?

    Tolly
    @Tolly Автор вопроса
    Вопрос решил, дело оказалось в кеше компьютера, доступ к файлам у меня организован через WebDrive, возможно что-то закешировалось.

    Что сделал:
    зашел через терминал на сервер и удалил файл, затем создал снова

    Кстати сброс opcache делал так:
    создал файл opchache-reset.php с содержанием <?php opcache_reset(); ?>
    сброс отрабатывал нормально, но мне это не помогло, помогло только удаление файла через терминал.
    Ответ написан
    Комментировать
  • Определить тип трафика на сайте, 3G или WI-FI?

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

    в первом случае определяем по user-agent,
    определение как
    !function(a){var b=/iPhone/i,c=/iPod/i,d=/iPad/i,e=/(?=.*\bAndroid\b)(?=.*\bMobile\b)/i,f=/Android/i,g=/(?=.*\bAndroid\b)(?=.*\bSD4930UR\b)/i,h=/(?=.*\bAndroid\b)(?=.*\b(?:KFOT|KFTT|KFJWI|KFJWA|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|KFARWI|KFASWI|KFSAWI|KFSAWA)\b)/i,i=/IEMobile/i,j=/(?=.*\bWindows\b)(?=.*\bARM\b)/i,k=/BlackBerry/i,l=/BB10/i,m=/Opera Mini/i,n=/(CriOS|Chrome)(?=.*\bMobile\b)/i,o=/(?=.*\bFirefox\b)(?=.*\bMobile\b)/i,p=new RegExp("(?:Nexus 7|BNTV250|Kindle Fire|Silk|GT-P1000)","i"),q=function(a,b){return a.test(b)},r=function(a){var r=a||navigator.userAgent,s=r.split("[FBAN");return"undefined"!=typeof s[1]&&(r=s[0]),s=r.split("Twitter"),"undefined"!=typeof s[1]&&(r=s[0]),this.apple={phone:q(b,r),ipod:q(c,r),tablet:!q(b,r)&&q(d,r),device:q(b,r)||q(c,r)||q(d,r)},this.amazon={phone:q(g,r),tablet:!q(g,r)&&q(h,r),device:q(g,r)||q(h,r)},this.android={phone:q(g,r)||q(e,r),tablet:!q(g,r)&&!q(e,r)&&(q(h,r)||q(f,r)),device:q(g,r)||q(h,r)||q(e,r)||q(f,r)},this.windows={phone:q(i,r),tablet:q(j,r),device:q(i,r)||q(j,r)},this.other={blackberry:q(k,r),blackberry10:q(l,r),opera:q(m,r),firefox:q(o,r),chrome:q(n,r),device:q(k,r)||q(l,r)||q(m,r)||q(o,r)||q(n,r)},this.seven_inch=q(p,r),this.any=this.apple.device||this.android.device||this.windows.device||this.other.device||this.seven_inch,this.phone=this.apple.phone||this.android.phone||this.windows.phone,this.tablet=this.apple.tablet||this.android.tablet||this.windows.tablet,"undefined"==typeof window?this:void 0},s=function(){var a=new r;return a.Class=r,a};"undefined"!=typeof module&&module.exports&&"undefined"==typeof window?module.exports=r:"undefined"!=typeof module&&module.exports&&"undefined"!=typeof window?module.exports=s():"function"==typeof define&&define.amd?define("isMobile",[],a.isMobile=s()):a.isMobile=s()}(this);
    
    if (isMobile.any) { alert('Мобильное устройство')}


    во втором случае определяем по ip, для этого нужна база с ip-адресами, например https://www.maxmind.com/en/geoip2-city или похожая, на просторах Интернета полно.

    Ну если Вам нужно определить с какой скоростью (3G или 4G) подключен Интернет, то тут только к оператору, либо тест какой-то устроить по скачке/закачке файла, аля speedtest.net

    И вообще интересно, для чего решается данная задача именно в поставленном контенте?!
    Ответ написан
  • Как я могу установить авторесайз высоты редактора TinyMCE?

    Подключить файл стилей и написать нужный стиль:
    add_action( 'after_setup_theme', 'my_theme_add_editor_styles' );
    function my_theme_add_editor_styles() {
    	add_editor_style( 'editor-style.css' );
    }
    Ответ написан
    Комментировать
  • В чем может быть проблема что tinyMCE редактор не отрабатывает пользовательские стили в редакторе?

    add_action( 'after_setup_theme', 'my_theme_add_editor_styles' );
    function my_theme_add_editor_styles() {
    	add_editor_style( 'editor-style.css' );
    }


    наверно дело в хуке
    Ответ написан
    Комментировать
  • Как прокинуть порт?

    /ip firewall nat
    add action=masquerade chain=srcnat src-address=192.168.1.0/24
    add action=dst-nat chain=dstnat dst-address=31.31.31.31 dst-port=3998 protocol=tcp to-addresses=192.168.1.3

    если есть другие правила в файрволе, то для проверки их нужно отключить
    Ответ написан
    2 комментария
  • Как добавить свою иконку в шапку редактора (классического) Wordpress?

    Tolly
    @Tolly Автор вопроса
    https://code.tutsplus.com/tutorials/guide-to-creat...
    https://www.tiny.cloud/docs/quick-start/

    functions.php
    # Шорткод [youtube] - плеер youtube на странице сайта
    function youtube_player($atts) {
      $atts = shortcode_atts( array(
            'vid' => 'k_okcNVZqqI', // id видео на ютубе
            'vol' => '20' // громкость от 0..100*/
        ), $atts );
    
      # генерируем уникальное id плеера
      $id = md5(uniqid(rand(),true));
    
      return "<div class=\"player_wrapper\"><div class=\"youtube_player\" data--video=\"id:'{$id}',videoId:'{$atts['vid']}',volume:'{$atts['vol']}'\"></div></div>";
    }
    
    add_shortcode('youtube', 'youtube_player');
    
    
    
    
    # Добавление кнопок в редактор TinyMCE, проверка что находимся в админпанели
    if ( is_admin() ) {
    	add_action( 'init', 'setup_tinymce_plugin' );
    }
    
    # Дополнительные проверки, на предмет стоит ли вообще подключать плагин
    function setup_tinymce_plugin() {
    
    	# Проверяем, может ли залогиненный пользователь редактировать посты или страницы
    	if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
    	  return;
    	}
    
    	# Проверяем пользуется ли пользователь визуальным редактором TinyMCE
    	if ( get_user_option( 'rich_editing' ) !== 'true' ) {
    		return;
    	}
    
    	# Подключаем фильтр
    	add_filter( 'mce_external_plugins', 'wptuts_add_buttons' );
    	add_filter( 'mce_buttons', 'wptuts_register_buttons' );
    }
    
    
    function wptuts_add_buttons( $plugin_array ) {
        $plugin_array['custom_link_class'] = get_template_directory_uri() . '/assets/js/tinymce.js';
        return $plugin_array;
    }
    function wptuts_register_buttons( $buttons ) {
        array_push( $buttons, 'dropcap', 'attention', 'youtube' );
        return $buttons;
    }
    tinymce.js
    (function() {
      tinymce.create('tinymce.plugins.Wptuts', {
        init : function(ed, url) {
          ed.addButton('dropcap', {
            title : 'Буквица',
            cmd : 'dropcap',
            image : url + '/btn-dropcap.png'
          });
    
          ed.addButton('attention', {
            title : 'Выделение параграфа',
            cmd : 'attention',
            image : url + '/btn-attention.png'
          });
    
          ed.addButton('youtube', {
            title : 'Добавление youtube плеера на страницу',
            cmd : 'youtube',
            image : url + '/btn-youtube.png'
          });
    
          /* Добавляем в style.css и editor-style.css, стиль:
            .dropcap {
              float: left;
              font-size: 90px;
              padding-right: 7px;
              line-height: 72px; } */
    
          ed.addCommand('dropcap', function() {
            var selected_text = ed.selection.getContent();
            var return_text = '';
            return_text = '<span class="dropcap">' + selected_text + '</span>';
            ed.execCommand('mceInsertContent', 0, return_text);
          });
    
          ed.addCommand('attention', function() {
            var selected_text1 = ed.selection.getContent();
            var return_text1 = '';
            return_text1 = '<span class="two_column align_center"><i class="icon-attention"></i><p>' + selected_text1 + '</p></span>';
            ed.execCommand('mceInsertContent', 0, return_text1);
          });
    
          ed.addCommand('youtube', function() {
            var vid = prompt('Введите id ролика на youtube: ');
            if (vid.length > 7) {
              shortcode = '[youtube vid="' + vid + '"]';
              ed.execCommand('mceInsertContent', 0, shortcode);
            } else {
              alert("Длина id ролика должна быть больше 7 символов.");
            }
          });
        },
      });
        tinymce.PluginManager.add( 'custom_link_class', tinymce.plugins.Wptuts );
    })();


    Только средняя кнопка attention как-то работает не очень, не вставляем мою обертку и все ((
    Ответ написан
    Комментировать
  • Выбор ноутбука: Asus VivoBook Pro vs Dell XPS?

    Лучше возьми 2 хороших монитора, а ноутбук можно любой взять, главное чтобы можно было подключить эти 2 монитора.
    Ноутбук главное, чтобы работал долго и легкий был, я бы взял xiaomi или dell, главное чтобы удобно самому было.
    И зачем больше 8гб на ноутбуке? Процессор i5 хватит, если денег много бери i7.
    Но не понимаю причем тут web разработка и ноутбук?! На пляже что ли работать будешь? ))
    Ответ написан
    Комментировать
  • Почему при кешировании формата js у меня не работает сайт?

    Tolly
    @Tolly Автор вопроса
    1. При включенном в nginx:
    add_header X-XSS-Protection "1; mode=block;";
    в консоли хрома, при запуске phpmyadmin получаю:
    Error parsing header X-XSS-Protection: 1; mode=block, 1; mode=block;: expected semicolon at character position 13. The default protections will be applied.

    Как видно защита применилась дважды, т.е. эта защита phpMyAdmin уже встроена, проверяем (домен заменил на фейковый):
    а) Сайт mysite.com
    HTTP/2 200
    server: nginx
    date: Thu, 07 Feb 2019 15:36:15 GMT
    content-type: text/html; charset=UTF-8
    vary: Accept-Encoding
    link: <https://mysite.com/wp-json/>; rel="https://api.w.org/"
    expires: Thu, 01 Jan 1970 00:00:01 GMT
    cache-control: no-cache
    strict-transport-security: max-age=63072000
    x-frame-options: SAMEORIGIN
    x-content-type-options: nosniff
    x-xss-protection: 1; mode=block;


    б) mysite.com/phpmyadmin/index.php
    HTTP/2 200
    server: nginx
    date: Thu, 07 Feb 2019 15:38:07 GMT
    content-type: text/html; charset=utf-8
    vary: Accept-Encoding
    set-cookie: pma_lang=en; expires=Sat, 09-Mar-2019 15:38:07 GMT; Max-Age=2592000; path=/phpmyadmin/; secure; HttpOnly
    set-cookie: phpMyAdmin=bt28h1km40qsqau05np1a2qt6k; path=/phpmyadmin/; secure; HttpOnly
    x-ob_mode: 1
    x-frame-options: DENY
    referrer-policy: no-referrer
    content-security-policy: default-src 'self' ;script-src 'self' 'unsafe-inline' 'unsafe-eval' ;style-src 'self' 'unsafe-inline' ;img-src 'self' data:  *.tile.openstreetmap.org;object-src 'none';
    x-content-security-policy: default-src 'self' ;options inline-script eval-script;referrer no-referrer;img-src 'self' data:  *.tile.openstreetmap.org;object-src 'none';
    x-webkit-csp: default-src 'self' ;script-src 'self'  'unsafe-inline' 'unsafe-eval';referrer no-referrer;style-src 'self' 'unsafe-inline' ;img-src 'self' data:  *.tile.openstreetmap.org;object-src 'none';
    x-xss-protection: 1; mode=block
    x-content-type-options: nosniff
    x-permitted-cross-domain-policies: none
    x-robots-tag: noindex, nofollow
    expires: Thu, 01 Jan 1970 00:00:01 GMT
    cache-control: no-cache
    pragma: no-cache
    last-modified: Thu, 07 Feb 2019 15:38:07 +0000
    vary: Accept-Encoding
    strict-transport-security: max-age=63072000
    x-frame-options: SAMEORIGIN
    x-content-type-options: nosniff
    x-xss-protection: 1; mode=block;


    видим, что строка x-xss-protection: 1; mode=block используется дважды, поэтому и ошибка
    Решение: phpmyadmin/libraries/classes/Header.php удаляем строки 599-601.
    5c5c54e627b68866411414.png

    2) После того как изменил настройки phpmyadmin:
    location ^~ /phpmyadmin {
            alias /var/www/phpmyadmin/;
            location ~ \.php$ {
                    fastcgi_pass backend7;
                    fastcgi_index index.php;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    fastcgi_ignore_client_abort off;
            }
    
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    access_log off;
                    log_not_found off;
                    expires 1M;
            }
    }


    phpMyAdmin нормально загружается, не смотря на то, что настройки уровнем выше не изменились, но теперь ему без разницы на js, все работает
    Ответ написан
    Комментировать
  • Как из Debian получить доступ к хосту на Windows (VMware)?

    Tolly
    @Tolly Автор вопроса
    В VMware создал еще одну подсеть, для обмена хоста с виртуалкой. Теперь все работает как надо.
    5c5b42efae91d084420873.png
    Ответ написан
    Комментировать
  • Как переключать домены в connect.yandex.ru?

    Tolly
    @Tolly Автор вопроса
    Создал для каждого домена свою организацию, больше ничего не придумал.
    Если есть какие-то мысли, пишите.
    Ответ написан
    Комментировать
  • Почему не работает пагинация?

    Tolly
    @Tolly Автор вопроса
    Комментировать
  • Как в Wordpress работать с куками?

    Tolly
    @Tolly Автор вопроса
    По предложению Анатолия, накидал скрипт для работы с куками:
    function cookie_test() {
    	global $cookie_test;
    	$cookie_test = false;
    
    	# Определяем имя файла
    	$url = parse_url($_SERVER['REQUEST_URI']);
    	$path = pathinfo($url['path']);
    	$basename = $path['basename'];
    
    	if( !isset($_COOKIE[$basename]) ) $cookie_test = true;	
    	setcookie( $basename, 1, time()+3600 );
    }
    add_action('init', 'cookie_test');


    global $cookie_test;
    if($cookie_test) echo "Страница еще не просмотрена!";


    Ну вроде заработало, еще раз спасибо Анатолию за идею.
    Ответ написан
    Комментировать
  • Как передать переменную в фильтр the_post_thumbnail?

    Tolly
    @Tolly Автор вопроса
    the_post_thumbnail('slider', array('class' => 'buka', 'id' => 'tuka'));


    в functions.php
    function multi_format_thumbnail( $html, $post_id, $post_thumbnail_id, $size, $attr ){
            # aaa имеет значение 'slider'
    	$aaa = $size;
    
            # Присваиваем $bbb = 'buka'
            # Иначе ошибка: "Undefined variable: bbb"
            $bbb = '';
            # Иначе ошибка: "Illegal string offset 'class'"
    	if(!is_array($attr)) $attr = array();
            # Иначе ошибка: "Uninitialized string offset: 0"
    	if (array_key_exists('class', $attr)) $bbb=$attr['class'];
    
            # Аналогично присваивается для $ccc='tuka'
    
    	# url картинки thumbnail
    	$url = get_the_post_thumbnail_url();
    	$html = "<img src=\"" . $url . "\" data1=\"" . $aaa . "\" data2=\"" . $bbb . "\" data3=\"" . $ccc . "\">";
    	return $html;
    }
    add_filter('post_thumbnail_html', 'multi_format_thumbnail', 10, 5);
    Ответ написан
    Комментировать