• Огромная таблица wp_postmeta как очистить?

    idShura
    @idShura
    Бекап незабудь сделать!

    -- Cleaning wp_commentmeta
    SELECT *
      FROM wp_commentmeta
     WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
    
    DELETE FROM wp_commentmeta
     WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
    
    SELECT *
      FROM wp_commentmeta
     WHERE meta_key LIKE '%akismet%';
    
    DELETE FROM wp_commentmeta
     WHERE meta_key LIKE '%akismet%';
    
    -- Cleaning wp_postmeta table
    SELECT *
      FROM wp_postmeta pm 
           LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
     WHERE wp.ID IS NULL;
    
    DELETE pm
      FROM wp_postmeta pm 
           LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
     WHERE wp.ID IS NULL;
    Ответ написан
    5 комментариев
  • Добавить вторую таксономию в URL записи?

    dimasmagadan
    @dimasmagadan
    Проблема в том, что вы пытаетесь вырезать аппендицит через нос. Немного не так это предполагается в WordPress делать.

    Посмотрите тут?
    shibashake.com/wordpress-theme/custom-post-type-pe...
    Статья в двух частях, как раз разбирают ваш случай
    Ответ написан
  • Можно ли сделать такой эффект при помощи swiper.js?

    Get-Web
    @Get-Web Куратор тега JavaScript
    Front-End Developer
    Примерно так:
    Ответ написан
    Комментировать
  • Как перенять объектно-ориентированное мышление?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Т.е. сложно понимаю, что "засунуть" в один объект, что в другой, что должно быть статическим методом, что приватным и тд.


    Давайте попробуем строить аналогии. Представьте что ваше приложение состоит исключительно из глобальных переменных и функций, которые с ними работают. Я думаю это не сложно представить. В каждый момент времени вам доступна любая переменная.

    То есть по сути наше приложение - один объект. У него внутри вообще все. У этого объекта есть один метод - обработай запрос. Когда внешний мир его вызывает, меняются значения каких-то переменных, вызываются какие-то внутренние "приватные" для внешнего мира функции, и делается работа.

    Теперь задумаемся о декомпозиции всего этого хаоса. Мы находим какую-то задачу, которую выполняет наш код (например какую функцию вызвать для обработки каждого конкретного запроса) и выносим это в отдельный объект. Отправка email-ов - отдельный объект. Весь SQL зашиваем в отдельный объект. Соединение с базой - объект. Пользователи - объекты. Все - объекты.

    И главное, у каждого объекта есть своя область ответственности. UNIX way. Каждый объект делает что-то одно и делает это хорошо. Бывает так что ну... нужно сделать так что бы один объект делал две вещи. НЕ вопрос, мы можем его попросить сделать что-то сложное, а он будет как хороший менеджер тупо делегировать работу другим объектом. То есть он и сложную штуку сделает, и сам не будет знать как она делается.

    А все безхозные функции, которые не пренадлежат никаким объектам (например функции порождающие объекты) можно вынести в статические методы. Главное что бы статичесих переменных у нас небыло (ибо это те же глобальные переменные). И поменьше публичного ибо черт его знает что эти разработчики будут использовать. Причем "те разработчики" это вы завтра.

    Вообщем писав всё время на процедурке, сложно перейти на ооп.


    Просто не думайте что это что-то "принципиально другое". Это та же самая процедурка, просто благодаря классам и объектам, вы можете порезать систему на маленькие модули. Данные будут лежать рядом с процедурами и у вас будет больше контроля за происходящим.

    Вы можете начать погружаться в ООП с того, что разобраться "почему глобальные переменные это плохо", почему "состояние порождает сложность" и что такое эта "сложность" (многие почему-то думают что сложность выражается в написании кода а не в его чтении или поддержке), почему "изоляция" (и как следствие инкапсуляция) - это хорошо. Как это все соотносится с декомпозицией. Что такое "ответственность", что такое зависимости, связанности

    Подскажите, какой проект начать писать (гостевая, блог), или может начать изучать фреймворк.


    Фреймворки универсальны, а значит чистого ООП там быть не может. Во всяком случае нет ни одного фреймворка на котором стоит учиться ООП.

    Есть хорошие упражнения на развитие понимания объектно-ориентированного проектирования. Например вот: https://habrahabr.ru/post/206802/

    Сразу хочу отметить что это крайности. Упражнения же. Они должны ограничивать вас что бы заставлять думать и задавать правильные вопросы.

    Или может подскажите книгу/сайт где пошагово в ооп написан какой-то проект, чтобы быстрее пришло понимание.


    Так вы научитесь делать один конкретный проект а на втором вы уже проиграете. Так дела не делаются. Надо разобраться с причинами появления идеи ООП. Ну то есть что было до. Можно еще с функциональным программированием попробовать разобраться. В PHP оно слабо применимо, но основные идеи очень тесно переплетаются с ООП и познав немного функциональщины ваше ООП будет лучше. Да и если про ООП вы можете найти много булшита, про функциональщину врут мало.
    Ответ написан
    3 комментария
  • Есть ли какие-то сервисы для натяжки html на WP?

    iiiBird
    @iiiBird Куратор тега HTML
    Пока ты спишь - твой конкурент совершенствуется
    такой сервис называется фриланс https://freelance.habr.com/
    Ответ написан
    Комментировать
  • Как лучше сделать такой блок на css?

    RAX7
    @RAX7
    наложить с помощью clip path и псевдоэлемента?

    А почему бы и нет. Вполне нормально получится. Альтернативное решение - использовать SVG в качестве background-image

    P.s. можно упороться и рисовать такое градиентами, но уж очень это заморочено получится

    UPD. Можно еще подложку полностью сделать на SVG, тогда вертикальные отступы внутри блока и высоту зигзага можно сделать пропорциональными ширине блока.
    Ответ написан
    Комментировать
  • Как сделать подобный "вырез" в блоке?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    Как вариант, так
    Ответ написан
    7 комментариев
  • Таблица wp_postmeta весит более 1 гига, что делать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вчера вечером как раз в телеграм канале задавался вопрос :)

    SELECT meta_key, meta_value, length(meta_value) 
    FROM wp_postmeta 
    ORDER BY length(meta_value) DESC
    LIMIT 10;


    - этот запрос покажет вам 10 самых тяжелых записей в этой таблице
    - изменяя LIMIT можно посмотреть больше/меньше записей
    - length(meta_value) покажет вес значения в байтах

    В итоге это позволило найти какие-то ненужные тяжелые записи в таблице и после чистки с 1+ гига уменьшилось до 300Мб.
    Ответ написан
    3 комментария
  • Как сделать, чтобы прилипающий блок в сайдбаре исчезал при достижении другого блока?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $(window).scroll(function() {
      const $banner = $('.banner');
      const bannerHeight = $banner.outerHeight(true);
      const bannerTop = parseInt($banner.css('top'), 10);
      const windowTop = $(this).scrollTop();
    
      $banner.toggleClass('hide', $('.fullwidth').get().some(n => {
        const $n = $(n);
        const nTop = $n.offset().top;
        const minTop = nTop - bannerHeight - bannerTop;
        const maxTop = nTop - bannerTop + $n.outerHeight(true);
    
        return windowTop > minTop && windowTop < maxTop;
      }));
    });
    Ответ написан
    1 комментарий
  • Лучшие практики разработки ecomm проектов?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Тут нет лучшего решения или лучших практик. И быть не может. E-commerce отталкивается от потребностей бизнеса и аудитории и бывает настолько разный что обычные интернет-магазины становятся просто каплей а море, а решений на рынке на любой вкус и цвет
    Ответ написан
    Комментировать
  • Как сделать свой фреймворк для WordPress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Определяетесь с функционалом которой вы чаща всего используете. Но которого нет из коробки. Или упощение вызова функций из коробки.
    Затем пишете его.
    На самом деле очень ускоряет работу, в процессе при необходимости дорабатываете модули.

    У меня структура сдвоена, на большие проекты, требующие много функционала кастомного и библиотек ставлю целиком.
    c53a6c14e3.jpg
    Для не крупных проектов в папку темы вычленяю mast-have
    ebe5b57372.jpg

    Если учтено все, то все очень просто обычно дальше.

    например так выглядит настройка хлебных крошек под дизайн темы

    function wpp_br_breadcrumbs_classes( $classes ) {
    	$classes = [
    		'wrap_class' => 'breadcrumb breadcrumb--overflow responsive-gutter section-padding-small',
    		'item_class' => 'wpp_br_item',
    		'link_class' => 'breadcrumb-item'
    	];
    
    	return $classes;
    }
    
    add_filter( 'wpp_fr_breadcrumbs_classes', 'wpp_br_breadcrumbs_classes' );


    Вот так регистрация новой таксономии
    function wpp_theme_register_taxonomy( $args ) {
    		
    		$args[ 'sliders' ] = [
    			'hierarchical' => true,
    			'post_types'   => [ 'slider' ],
    			'single'       => 'Слайдер',
    			'plural'       => 'Слайдеры',
    			'genitive'     => 'Слайдер',
    			'cir'          => true
    		];
    
    
    		return $args;
    	}


    ну и т.д.
    Ответ написан
    1 комментарий
  • Как сменить пароль Битрикс через myadmin?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Если есть доступ к ftp, то просто выполните код
    $user = new CUser;
    $fields = Array(
      "PASSWORD"          => "123456",
      "CONFIRM_PASSWORD"  => "123456",
      );
    $user->Update($ID, $fields);
    $strError .= $user->LAST_ERROR;
    Ответ написан
    1 комментарий
  • Как очистить строку от символов?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $phone = preg_replace("/[^+0-9]/s", "", strip_tags(trim($_POST['phone'])));
    Ответ написан
    Комментировать
  • Как деплоить правки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, запомнить раз и навсегда 2 простые истины:

    1. Продакшн база данных должна быть только на продакшне и больше нигде. Эти данные нельзя as-is использовать локально - в том числе по причинам юридическим и privacy (привет логины-пароли клиентов, их персональные данные и тд). Грубо говоря, за это можно и пострадать.
    2. Локальная / development база данных работает только с тестовыми / посевными данными.

    Между ними никакой синхронизации не должно быть, никогда. От слова совсем. И WordPress тут вообще ни при чем - эта проблема существует и в Laravel, Symfony, Ruby on Rails и тд. Просто там с нуля сразу учат решать ее правильно. Впрочем, продакшн-данные можно (и даже нужно) использовать как пример для генерации локальных данных. Например, в production БД можно посмотреть какие реальные first name и last name используются юзерами, чтобы улучшить валидацию и/или отображение.

    Как с этим жить?

    1. Для переноса изменений структуры базы данных используются миграции. В WordPress для этого есть dbDelta().
    2. Для переноса посевных данных используются посевы (seeds). Например, если нужно залить список терминов в глоссарий (custom taxonomy), заполнить список отделов компании и тд - все это сеется.
    3. Все остальное (настройки мышкой в админке, добавление контента и тд) делается руками. Локально вы вообще не должны даже думать о том, чтобы создавать какие-то страницы 1 в 1 с рассчетом на то, что потом будете их как-то "синхронизировать" на боевой сервер. Это в корне неправильный mindset, который и привел вас к этой проблеме. На локальной версии вы все тестируете с тестовыми данными. Даже если вы не используете lorem ipsum, а вставляете реальный текст предоставленный клиентом - это все равно тестовые данные.
    4. Чтобы сайт не ломался в процессе выкатывания изменений (когда код залили, а контент еще делается) код нужно писать с учетом этой логики (опять же - дело в mindset). Например, есть такое понятие как feature flags, есть function_exists(), есть isset(). Ваш код должен работать корректно всегда - например, если данные для какого-то блока не заполнены, то блок не выводится вообще.
    Ответ написан
    Комментировать
  • Как отверстать такие линии не изображением?

    iamd503
    @iamd503 Куратор тега CSS
    Верстальщик
    Сталкивался с таким дизайном и дизайнерами, которые такое рисуют - больше с ними не работаем
    Ответ написан
    2 комментария
  • Как обнулить все заполненные поля формы?

    @karminski
    Senior React.JS Developer
    1. При входе на страницу сохранить исходное состояние всех инпутов
    let initialState = $('#myForm').serializeArray();
    2. При возвращении к началу - восстановить исходное состояние
    let form = $('#myForm');
    if (form.attr('name') in initialStates) {
        initialStates[form.attr('name')].forEach(item => {
            form.find('[name="' + item.name + '"]').val(item.value);
        });
    }
    Ответ написан
    Комментировать
  • Как прописать нюансы договора при создании сайта?

    @latush
    работайте только по 100% предоплате.
    Тогда уже заказчик будет вас подгонять, а не морозится...
    Впрочем, достаточно и 50%, обычно
    по пунктам
    "- Заказчик очень долго проверяет (вплоть до неск. месяцев)
    вписываем в договор что-то типа "заказчик должен подписать акт выполненых работ или выставить притензии не познее чем через 3(три) дня после выставления акта выполненых работ"

    "- Заказчик не предоставляет контент очень длительное время. (так же вплоть до полугода. И это не про большие СЕО текста, а про какие нибудь контактные данные, пару фоток и т.д)"
    та же фигня. все сроки вписываются в договор, оговариваются форс-мажоры, при условии соглашения сторон

    "- Заказчик просит переделать одну и туже мелочь по 50 раз (какую нибудь ерунду, вроде поменять 2 слова, но в течении очень долгого времени и на одной и той же странице. Это как пример)"
    сложный вопрос и самый труднодоказуемый. Единственный вариант - все под протокол разногласий, или как оно там правильно юридически.

    "- Заказчик не объяснил что хотел, сказал делайте на своё усмотрение и сначала всем был доволен. Потом подключил еще проверяющего и тут же всё не нравится: переделывайте всё заново и бесплатно. (Естественно, на проверку скидывается каждый этап работ и только после одобрение идём дальше.)"
    На этом этапе, обычно, заказчик посылается в арбитраж. После чего, как правило, несколько трезвеет и с ним уже можно договариваться. Как-то в таком случае, получили оплату за 3 сайта, вместо одного.

    "- Заказчик просит добавить довольно серьёзный функционал, который не был обговорен и соответственно не был просчитан в цене. Доплачивать заказчик не желает."
    тут все просто "Читайте согласованное с вами ТЗ".

    И напоследок. Все эти телодвижения имеют смысл при наличии знакомого/прикормленного юриста, съевшего собаку на арбитраже. И даже в этом случае, деньги будут выбиваться очень долго.

    PS. не работайте с мудаками.
    PPS. Чуть не забыл. Все показывайте заказчику на своем хостинге. подписал акт выполненных работ - можно переносить к нему. Впрочем, я дожидался подтверждения из банка о поступлении средств.
    Ответ написан
    4 комментария
  • Wordpress multisite циклическая переадресация на дочерних сайтах?

    IT-means-lucky
    @IT-means-lucky
    mozgovitui@gmail.com
    Попробуй этот.

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
    RewriteRule . index.php [L]
    Ответ написан
    2 комментария