• Почему worpress добавляет перед каждым символом (') или ("). (\) В методе get и post?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Потому что безопасность. Читаем документацию PHP-функции addslashes() и возвращаемся к основам, учить матчасть.
    Ответ написан
  • Как в админке вордпресса создать отдельную страницу?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Да, можно. Для "добавления фильмов, проектов" и тд - скорее всего произвольные типы данных (Custom Post Types). Для всяких настроек глобальных - страницы настроек (Option Pages).

    С вашим текущий уровнем (не)понимания WordPress вам путь прямиком на wp-kama.ru и WordPress Codex. Изучите документацию от А до Я, и все прояснится. А уже по тонкостям мы тут всегда поможем.
    Ответ написан
  • Как в wordpress привязать посты к дням месяца и выводить в зависимости от выбранного дня?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. День храним в postmeta (произвольное поле) или в таксономии (дни ведь будут повторяться, 1...31, верно?)
    2. Выводим запросом get_posts() или WP_Query, составим параметры в нужном виде (meta_query если произвольное поле, tax_query если таксономия)
    3. Профит.

    Если совсем грубо, в вашем ajax-коллбеке (php-функции) добавляем:
    $args = [
        'posts_per_page' => 1, // запись ведь у нас одна будет
        'no_found_rows' => true, // не нужно SQL_CALC_FOUND_ROWS, запрос будет сильно быстрее выполняться
        'post_type' => 'custom_post_type_name', // название кастомного типа записи
        'post_status' => 'publish', // только опубликованные
        // тут пишем meta или tax подзапрос (см. ссылки на документацию выше)
    ];
    $query = new WP_Query( $args );
    // Наш пост будет в массиве $query->posts
    $post = reset( $query->posts );
    // Ну или делайте обычный WordPress Loop - тут уж как удобнее.


    Но вообще я бы отдельно хранил меню для женщин и мужчин, как отдельные посты. День - полной датой в метаданных. И забирал данные аяксом через коллбек, а с помощью REST API. Тогда в фильтр апишки достаточно передавать мета-поле (название и искомое значение). Все это есть в документации по REST API.
    Ответ написан
    3 комментария
  • MacBook Pro 15 2015 какая должна быть температура?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Mojave стабильна и прекрасна. И, имхо, шустрее El Capitan, Sierra и High Sierra + эффективнее по энергопотреблению. Советчиков "не обновляться" шлите лесом, это староверы. Месяц-два после выхода новой оси бывают шероховатости местами, в остальном это всегда улучшения. Ну а через полгода+ система уже давно стабильна. У самого MBP 15" 2015 (правда с дискретной видяхой).
    2. Если крутить видосы 4К или другим способом нагружать железо под завязку, то 100 градусов - нормальная рабочая температура. У меня до чистки (3 года не чистил и не смазывал) даже при небольших нагрузках вентиляторы взлетали и температура держалась в диапазоне 90+. После чистки конечно прошло, но при высоких нагрузках все равно под сотню греется, это норм для прошек. В обычной рабочей нагрузке (PhpStorm, Safari, iTerm, веб-сервер и с десяток небольших приложений):
    5c6bd397ec79e861926323.png
    Когда PhpStorm большой проект с нуля индексирует, то вентиляторы на максимум и температра 92-96 обычно. Впрочем, даже при 100 градусах, его вполне можно держать на руках, сильного дискомфорта нет. Когда-то у меня был Dell, так я им квартиру зимой отапливал. Даже без нагрузки через 10 минут после включения на коленях держать невозможно.
    Ответ написан
    5 комментариев
  • Почему не работает сортировка?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Для начала:
    1. Не используйте -1 в posts_pet_page, это плохая практика. Используйте достаточно больше, но ограниченное число, например 100.
    2. $args2 = new WP_Query какое-то нелогичное название переменной, там $posts или $places просятся.
    3. Цикл вывода покажите. Скорее всего проблема там.
    Ответ написан
    Комментировать
  • Перенос каталогов и файлов с подтверждением phpstorm?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Хз, у меня подтверждение спрашивает всегда:

    5c6bcebf90594747452576.png

    Собственно, так и должно быть.
    Ответ написан
    Комментировать
  • Есть ли смысл в моем выборе. PHP или JS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Лучше научиться понимать общие принципы, которые стоят за бекендом - реляционные и nosql базы, сильные и слабые стороны и их специфика, АПИ, serverless / lambda, цикл request-response, многопоточность, очереди, in-memory cache и все такое. А язык (JavaScript, PHP, .NET, Python, Ruby etc) или конкретный фреймворк на каком-то из этих языков - дело десятое.
    Ответ написан
    Комментировать
  • Шаблон архива для таксономии ВП. Как сделать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если шаблон один и тот же для архива post type и для архива терминов taxonomy, привязанных к данному post type, то чтобы его не дублировать, делают вот так:
    /**
     * Use one template for both post type archive and taxonomy archive.
     *
     * @param string $template
     * @return string
     */
    function goods_shared_archive_template( $template )
    {
    	if ( is_post_type_archive( 'goods' ) || is_tax( 'goods-taxonomy' ) ) {
    		return locate_template( [ 'goods-archive.php' ] );
    	}
    
    	return $template;
    }
    add_filter( 'template_include', 'goods_shared_archive_template', 99 );
    Ответ написан
    Комментировать
  • На чем писать шаблон wordpress в 2019?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Как ни крути, а писать тему в 2019 году придется на HTML + CSS + JavaScript + PHP, как и 10 лет назад. Использовать ли какие-то новомодные фреймворки и библиотеки - зависит исключительно от ваших задач, привычек и навыков. Ни одно из упомянутых хайповых словечек (npm, vue, react и тд) не является обязательным и даже необходимым.
    Ответ написан
    Комментировать
  • Вернуть старую версию wordpress и php?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, вы путаете версии движка PHP и движка WordPress. Это разные версии и их обе откатывать не нужно. Во-вторых, вероятнее всего вам вообще ничего не надо откатывать, а нужно устранить PHP Warning, то есть ошибку в коде, которая вызывает это сообщение. И хотя на первый взгляд ошибка ведет в wp-includes/blocks.php:183, в реальности наверняка она выше по стеку. Нужно смотреть все сообщение об ошибке целиком, включая Stack Trace.
    Ответ написан
    1 комментарий
  • Как изменить сортировку записей в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Изменение параметров запроса до его выполнения делается на хуке pre_get_posts:
    function posts_default_order( $query )
    {
        // Прекращаем выполнение, если это не главный запрос и мы не в админке.
        if( ! $query->is_main_query() || ! is_admin() ) {
            return;
        }
    
        // Значения: date/post_date, modified/post_modified.
        $query->set( 'orderby', 'date' );
        $query->set( 'order', 'DESC' );
    }
    add_action( 'pre_get_posts', 'posts_default_order' );
    Ответ написан
    6 комментариев
  • Как сделать метабокс, который будет иметь все метки метабокса "Метки"?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Найдите в ядре WP код вывода метабокса меток.
    2. Скопируйте к себе.
    3. Модифицируйте код под свои задачи.
    Ответ написан
    4 комментария
  • Как оценить стоимость разработки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Обычно даже примерно не могу прикинуть требующееся время на разработку

    Боюсь, с таким подходом на фриланс лучше не идти, репутацию себе запятнаете. Или опыта и знаний недостаточно, или сильно разбалованы ненапряжным офисным графиком.
    Ответ написан
    Комментировать
  • Как делают title жирным?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Не делайте так. Все пользователи, которые используют альтернативные методы (в первую очередь - читалки) будут плакать. Читалка будет зачитывать эту кашу посимвольно, называя каждый символ его полным названием (а это все специальные символы с конкретным значением а не просто "жирные буквы").
    Ответ написан
    Комментировать
  • Как отключить оповещение на е-майл, регистрация нового пользователя?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вот список всех ситуаций и писем, которые WP рассылает: https://gist.github.com/johnbillion/0a48021de5510c...
    В описании каждого письма есть инструкция как его отключить. Например, чтобы отключить все письма при регистрации нового пользователя:
    remove_action( 'register_new_user', 'wp_send_new_user_notifications' );

    Впрочем, пользователю желательно отправлять. Давайте отключим только администратору:
    remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
    add_action( 'register_new_user', 'notify_only_user' );
    
    function notify_only_user( $user_id, $notify = 'user' )
    {
        wp_send_new_user_notifications( $user_id, $notify );
    }
    Ответ написан
    Комментировать
  • Как автоматически убрать привязку поста к рубрике через определенное время?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Создайте ежедневную cron-задачу, см. wp_schedule_event()
    2. В хуке на этой задаче проверяйте получаете все посты из нужной вам категории, сравниваете их дату с текущей, если пора отключать - отключаете c помощью wp_remove_object_terms()
    Ответ написан
    Комментировать
  • Как лучше организовать код?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А я бы посоветовал начать с изучения концепта DDD - Domain Driven Design. Это позволит уложить в голове структуру по части бизнес логики и как это натянуть на код. А уже организация в конкретном фреймворке - дело второе.
    Ответ написан
    Комментировать
  • Как отсортировать массив?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Функция uksort()

    // Берем входящий массив:
    $input = [
      [
    	  'gq_address'     => '188.120.254.140',
    	  'gq_hostname'    => '•   RGPlay | DarkRP [Быстрая загрузка]',
    	  'gq_maxplayers'  => 128,
    	  'gq_numplayers'  => 0,
    	  'gq_online'      => true,
    	  'gq_port_client' => 27015,
      ],
      [
    	  'gq_address'     => '62.109.18.242',
    	  'gq_hostname'    => 'Default Breach Server',
    	  'gq_maxplayers'  => 128,
    	  'gq_numplayers'  => 0,
    	  'gq_online'      => true,
    	  'gq_port_client' => 27015,
      ],
    ];
    
    // Определяем желаемый порядок ключей:
    $order = [
    	'gq_hostname',
    	'gq_address',
    	'gq_port_client',
    	'gq_online',
    	'gq_numplayers',
    	'gq_maxplayers',
    ];
    
    // Перебираем элементы входящего массива и сортируем их по ключам:
    $output = array_map( function($array) use ($order)
    {
            // Эта функция сортирует по ключам
    	uksort( $array, function($a, $b) use ($order)
    	{
    		$a_desired_position = array_search($a, $order, true);
    		$b_desired_position = array_search($b, $order, true);
    
                    // Вот тут вся магия:
                    // нужно вернуть отрицательное число, 0 или положительное число, 
                    // в зависимости от положения одного элемента относительно другого.
    		return $a_desired_position - $b_desired_position;
    	} );
    
    	return $array;
    }, $input );
    
    var_dump($input);
    var_dump($output);


    Вот что мы получаем в итоге:

    // Входящий массив:
    array:2 [▼
      0 => array:6 [▼
        "gq_address" => "188.120.254.140"
        "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]"
        "gq_maxplayers" => 128
        "gq_numplayers" => 0
        "gq_online" => true
        "gq_port_client" => 27015
      ]
      1 => array:6 [▼
        "gq_address" => "62.109.18.242"
        "gq_hostname" => "Default Breach Server"
        "gq_maxplayers" => 128
        "gq_numplayers" => 0
        "gq_online" => true
        "gq_port_client" => 27015
      ]
    ]
    // Отсортированный массив:
    array:2 [▼
      0 => array:6 [▼
        "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]"
        "gq_address" => "188.120.254.140"
        "gq_port_client" => 27015
        "gq_online" => true
        "gq_numplayers" => 0
        "gq_maxplayers" => 128
      ]
      1 => array:6 [▼
        "gq_hostname" => "Default Breach Server"
        "gq_address" => "62.109.18.242"
        "gq_port_client" => 27015
        "gq_online" => true
        "gq_numplayers" => 0
        "gq_maxplayers" => 128
      ]
    ]


    Вывод: учите матчасть.
    Ответ написан
    Комментировать
  • Wordpress цикл bootstrap grid?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Давайте уже закроем этот вопрос. Несколько моментов:

    1. Не нужно запускать цикл несколько раз, все условия проверяются внутри одного цикла.
    2. Свойство $query->current_post проверяем внутри цикла, счетчик начинается с 0.

    <div class="container">
    	<div class="row">
    
    		<?php
    		$args = [
    			'post_status'            => 'publish',
    			'posts_per_page'         => 5,
    			'no_found_rows'          => true,
    			'cache_results'          => true,
    			'update_post_meta_cache' => false,
    			'update_post_term_cache' => false,
    		];
    		$query = new WP_Query( $args );
    
    		while ( $query->have_posts() ) : $query->the_post();
    
    			// 1я запись, целиком в .col-6
    			if ( $query->current_post === 0 )
    			{
    				echo '<div class="col-6">'; // Открыли .col-6
    					echo '<div class="post-card">';
    						the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
    						the_title();
    					echo '</div>';
    				echo '</div>'; // Закрыли .col-6
    			}
    
    			// 2я и 4я записи, только открываем .col-3 и выводим 1 запись
    			if ( $query->current_post === 1 || $query->current_post === 3 )
    			{
    				echo '<div class="col-3">'; // Открыли .col-3
    					echo '<div class="post-card">';
    						the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
    						the_title();
    					echo '</div>';
    			}
    
    			// 3я и 5я записи, выводим запись и закрываем .col-3
    			if ( $query->current_post === 2 || $query->current_post === 4 )
    			{
    					echo '<div class="post-card">';
    						the_post_thumbnail( 'custom-size', [ 'class' => 'img-fluid' ] );
    						the_title();
    					echo '</div>';
    				echo '</div>'; // Закрыли .col-3
    			}
    
    		endwhile; ?>
    
    	</div>
    </div>


    Данный код выведет вот такой HTML:

    <div class="row">
    	<div class="col-6">
    		<div class="post-card">
    			...
    		</div>
    	</div>
    
    	<div class="col-3">
    		<div class="post-card">
    			...
    		</div>
    
    		<div class="post-card">
    			...
    		</div>
    	</div>
    
    	<div class="col-3">
    		<div class="post-card">
    			...
    		</div>
    
    		<div class="post-card">
    			...
    		</div>
    	</div>
    </div>


    Но, важно понимать порядок постов в колонках .col-3 - он будет таким:

    .col-6      .col-3      .col-3
    ------      ------      ------
    post-1      post-2      post-4
                post-3      post-5


    а не вот таким:

    .col-6      .col-3      .col-3
    ------      ------      ------
    post-1      post-2      post-3
                post-4      post-5


    В принципе, еще есть другой путь:

    - Посты получаете через get_posts() в виде массива объектов WP_Post.
    - HTML генерите без цикла, формируете как вам надо.
    - В нужных местах подставляете нужный объект WP_Post по его индексу в массиве.
    Ответ написан
    5 комментариев
  • Как перевести строку с указанием своего языка в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Конечно нет. Сигнатура функции __( $sting, $domain ) принимает 2 аргумента, а не 3, и языка там нет. Текущая активная локаль устанавливается отдельно, на раннем этапе загрузки движка. После этого файлы с переводами для установленной локали загружаются в память и все дальнейшие операции по "переводу" строк происходят с этим загруженным массивом строк. Переключение на лету на другой язык означает необходимость догрузки файлов переводов или проактивную их загрузку заранее. Обе идеи - не самые светлые.
    Ответ написан
    Комментировать