Задать вопрос
  • Как добавить управление метатегом description в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Поставьте seo-плагин (Yoast, Rank math, The SEO Framework, All in One SEO Pack)

    Или напишите свой вывод полей на хуке wp_head(), например, с помощью ACF или Carbon fields
    Ответ написан
  • Как получить слаг таксономии по ее ID?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Какой сложный у вас процесс)

    $term = get_term( $id, $taxonomy );
    $slug = $term->slug;
    Ответ написан
    3 комментария
  • Как в админке wordpress менять местами категории товаров перетаскиванием, если там много страниц категорий?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Настройки экрана -> Количество элементов на странице

    5fabc662c6892818906308.png
    Ответ написан
    Комментировать
  • Как вытянуть значение из тега html?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Используйте ->plaintext, чтобы получить только текст внутри тега. Если вам нужны изображения, то текста внутри тега img нет и чтобы получить ссылку на него используйте ->src. После обработки желательно сбрасывать переменные

    $html = file_get_html($file_path);
    
    // Find all paragraphs
    $paragraphs = $html->find( 'p' );
    foreach ( $paragraphs as $key => $paragraph ) {
    	var_dump($paragraph->plaintext);
    }
    
    // Find all images
    $images = $html->find( 'img' );
    foreach ( $images as $key => $image ) {
    	var_dump($image->src);
    }
    
    $html->clear();
    unset($html);


    А лучше почитайте документацию, там все есть
    Ответ написан
    Комментировать
  • Как скрыть блок если дочерних нету?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте так

    $reserve = get_post_meta($post->ID, 'reserve', true);
    $sold_out = get_post_meta($post->ID, 'sold_out', true);
    
    if ( ($reserve != 'off') && ($sold_out != 'off') ) {
    	echo '<div class="prop-item-top-badge">';
    		if( $reserve == 'on' ) { 
    			echo '<div class="badge badge-reserve">' . __( "Reserve", "restate" ) . '</div>';
    		}
    		if( $sold_out == 'on' ) {
    			echo '<div class="badge badge-sold_out">' . __( "Sold out", "restate" ) . '</div>';
    		}
    	echo '</div>';
    }
    Ответ написан
    Комментировать
  • Градиент справа налево под углом?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Поменяйте цвета местами)

    background: linear-gradient(45deg, #000 90%, #f00 10%);
    Ответ написан
    2 комментария
  • Какую CMS выбрать для "магазина одного товара"?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вы можете поискать в стоковом репозитории Внешний вид -> Темы. По тегу landing 170 тем, вполне реально выбрать что-то визуально подходящее и доработать в дочерней теме

    5fa9d6f6d252e990151179.jpeg
    Ответ написан
    Комментировать
  • Масовое редактирование записей (сайт на вордпрес)?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете воспользоваться нативной функцией wp_update_post(), чтобы обновить нужные вам данные:

    // получаем все посты
    $my_posts = get_posts( array(
    	'numberposts' => -1,
    	'post_type'   => 'post',
    ) );
    
    
    foreach ( $my_posts as $key => $my_post ) {
    
    	// как-то обрабатываем контент, например, убираем регуляркой перечисленные символы
    	$content = preg_replace('/([\^\%]+)/', '', $my_post->post_content);
    
    	$post_data = array(
    		'ID'             => $my_post->ID,
    		'post_content'   => $content, 
    	);
    
    	// пушим контент обратно
    	$post_id = wp_update_post( wp_slash( $post_data ) );
    
    	// пишем ошибку/ успех
    	if( is_wp_error($post_id) ) {
    		var_dump( 'Ошибка обновления поста ' . $my_post->post_title . ': ' . $post_id->get_error_message() );
    	} else {
    		var_dump( 'Пост ' . $my_post->post_title . ' обновлен удачно!' );
    	}
    
    }


    Можете запустить функцию в functions.php или повесить на любой удобный вам хук. Учитывайте, что на хуке save_post создается бесконечный цикл, т.к. wp_update_post() сам по себе вызывает save_post и его нужно отключать
    Ответ написан
  • Как добавить noindex для постов из определенной категории Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Могу предложить вам решение не связанное с Rank Math или Yoast. Вы можете написать любые условия и вывести meta noindex на хуке wp_head

    add_action( 'wp_head', 'skill_noindex', 1 );
    if ( !function_exists( 'skill_noindex' ) ) {
    	function skill_noindex() {
    
    		// закрываем от индексации пустые архивные страницы (таксономии, категории, теги)
    		if( is_archive() && !have_posts() ) {
    			echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    		}
    
    		// закрываем от индексации категорию "отзывы"
    		if ( is_category( 'testimonials' ) ) {
    			echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    		}
    
    		// проверяем, что тип записи - post, но достаточно проверять is_single()
    		if ( get_post_type() === 'post' ) {
    			// получаем категории поста
    			if ( $categories = get_the_category( get_queried_object_id() ) ) {
    				foreach ( $categories as $key => $category ) {
    					// проверяем, что в массиве есть категория Новости
    					if ( $category->slug == 'news' ) {
    						echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    					}
    				}
    			}
    		}
    
    	}
    }


    UPDATE

    С версии 5.7 для этого появился фильтр, пользоваться так:

    add_filter( 'wp_robots', 'skill_robots' );
    if ( !function_exists( 'skill_robots' ) ) {
      function skill_robots( $robots ) {
    
        if ( is_archive() && !have_posts() ) {
          $robots['noindex'] = true;
          $robots['nofollow'] = true;
        }
    
        $robots['max-snippet'] = '-1';
        $robots['max-image-preview'] = 'large';
        $robots['max-video-preview'] = '-1';
    
        return $robots;
      }
    }
    Ответ написан
    7 комментариев
  • Как использовать wp_update_post для значения масиив?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте так:

    $post_data = array(
    	'ID'             => $post_id,
    	'tax_input'      => array( 'et_post_format' => array( 'aydio' ) ), 
    );
    
    wp_update_post( wp_slash( $post_data ) );
    Ответ написан
  • Как распарсить json идущий друг за другом со вложенностью?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вы можете воспользоваться json_decode(), чтобы конвертировать в массив, пересобрать и вернуть в json обратно с помощью json_encode()

    Пример ваш не работает, потому что вы три массива скопировали в одну строку. Тот, который работает вернет вам один ключ => значение

    $json = '{"param1": "value1","param1": "value1","param1": "value1","param1": {},"param1": "value1"}';
    $json = json_decode( $json, true );
    var_dump($json); // печатает array(1) { ["param1"]=> string(6) "value1" }
    Ответ написан
    7 комментариев
  • Не работает media screen запрос в стилях темы wordpress, как заставить работать?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Ну давайте исключим еще несколько частых проблем

    1. wp_head() в теме вообще есть?
    2. Кеш? ctrl + f5?
    3. Уверены, что смотрите при разрешении меньше 768?

    Если не помогло, то воспользуйтесь старым-добрым впешным дебагом: отключаете все плагины, включаете дефолтную тему. Теперь нормально работает? Тогда по очереди включаете плагины. Если не нашли проблему, то ищите и проверяйте в теме все, что на хуках init, after_setup_theme и сравнивайте с дефолтной темой
    Ответ написан
    Комментировать
  • Как сделать выбор города в хедере WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Половину ответа вы уже написали - создайте поддомены, сделайте из них массив город => поддомен, создайте из него select, чтобы пользователь мог сам выбрать нужный город

    Чтобы определять местоположение пользователя и предлагать выбор поддомена вам понадобится какое-то api. Я посоветую использовать яндекс карты, они определяют довольно точно (в город точно попадете). Тут пример. Проверяете город пользователя в своем массиве, если да, спрашиваете в попапе действительно ли это его город, если да, делаете редирект на поддомен
    Ответ написан
  • Как обернуть текст в ссылку в PHP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если вы хотите на внутренних страницах переходить на главную кликнув по логотипу, можете воспользоваться этим примером или кастомизировать его

    if ( is_front_page() && is_home() ) {
    	$html = '<div class="site-branding">';
    		$html .= '<h1 class="site-branding__title">' . get_bloginfo( 'name' ) . '</h1>';
    		$html .= '<p class="site-branding__description">' . get_bloginfo( 'description') . '</p>';
    	$html .= '</div>';
    } else {
    	$html = '<a class="site-branding" href="' . esc_url( home_url( '/' ) ) . '" rel="home">';
    		$html .= '<h1 class="site-branding__title">' . get_bloginfo( 'name' ) . '</h1>';
    		$html .= '<p class="site-branding__description">' . get_bloginfo( 'description') . '</p>';
    	$html .= '</a>';
    }
    
    echo apply_filters( 'get_site_branding', $html );
    Ответ написан
    2 комментария
  • Как вывести поле из acf на определенной странице только не в статье а в шаблоне?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если речь идет о поле, которое относится к посту, то чтобы его вывести в любом месте вашего кода, достаточно знать его название (selector) и ID записи

    the_field($selector, [$post_id], [$format_value]);
    Ответ написан
    Комментировать
  • Как сделать подсчёт папок за день в php?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Можете использовать параметр GLOB_ONLYDIR, чтобы просто узнать количество папок:

    $countDir = count( glob( 'includes/*', GLOB_ONLYDIR ) );


    Если нужно узнать количество папок созданных за конкретную дату, воспользуйтесь следующей функцией. Вторым параметром можете передать конкретную дату

    $date = date("d-m-Y");
    $countDir = countDir($fileDir, $date);
    
    var_dump($countDir);
    
    function countDir( $path, $date, $count = 0 ) {
    	if( file_exists($path) && is_dir($path) ) {
    		$dirHandle = opendir($path);
    			while ( false !== ($file = readdir($dirHandle)) ) {
    				// исключаем папки с названием '.' и '..'
    				if ( $file != '.' && $file != '..' ) {
    					$filePath = $path . '/' . $file;
    					// если папка
    					if ( is_dir( $filePath ) ) {
    						// сраниваем $date с датой создания
    						if ( $date == date("d-m-Y", filectime($filePath)) ) {
    							$count++;
    						}
    					} // end if is_dir( $filePath )
    				} 
    			} // end while
    		closedir($dirHandle);
    	}
    	return $count;
    }
    Ответ написан
    3 комментария
  • Как вывести произвольные поля поста по одному из значений одним запросом?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В ВП, вместе с wp_query() кешируются все метаполя в запросе, т.е. при использование функции get_post_meta() дополнительного запроса в базу не будет
    Ответ написан
    Комментировать
  • Как правильно редактировать дочернею тему?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В целом, это правильный подход, но зависит от того, что вы хотите изменить

    В большинстве нормальных тем в таких файлах как footer.php огромное количество хуков, за которые можно зацепиться и добавить свой контент, а если в функциях перед выводом контента стоит apply_filters(), вы можете изменить вывод контента через дочернюю тему, написав соответствующий фильтр

    Менять сам файл footer.php стоит, только если вам нужно изменить статическую разметку или всю структуру. Но будьте осторожны при кастомизации, удалив какие-то хуки и функции у вас может отвалиться часть функционала или вывалится критическая ошибка, а id и классы могут использовать js-скрипты, которые тоже перестанут работать
    Ответ написан
    Комментировать
  • Как отключить вывод постов у таксономии, у которых нет постов, а есть лишь у ее дочерних таксономий?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте использовать 'include_children' => false для массива tax_query

    $test = get_posts([
    	'post_type' => 'nwb_page',
    	'order' => 'ASC',
    	'tax_query' => [[
    		'taxonomy' => 'nwb_cat',
    		'field' => 'id',
    		'terms' => 13,
    		'include_children' => false
    	]],
    ]);
    Ответ написан
  • Какой плагин для WordPress выбрать?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте Rate my Post, мне он понравился тем, что выводит в сниппет рейтинг в поисковиках

    5fa71c1621ead581116375.png

    Но я давно не сравнивал его с аналогичными, вполне возможно так уже делает каждый первый)
    Ответ написан
    Комментировать