/ Wordpress / PHP

PHP

HIT

14.06.2015

3550

В данный пост размещаются различные команды PHP с которыми по мере развития приходится разбиратся, а также некоторые интерессные решения PHP.

Отличный справочник по функциям php.

Вывод на экран показаний переменной

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

<?php print_r ($category_id); ?>

strip_tags — Удаляет HTML и PHP-теги из строки

<?php echo category_description(); ?> - обычное описание с <p></p>
<?php echo strip_tags(category_description()); ?> - описание без <p></p>

Получить ID текущего объекта (записи, страницы, категории, метки)

<?php $test = get_queried_object_id(); ?>
<?php print_r ($test); ?> — вывести ID

Альтернатива:

$cat_ID = get_query_var('cat'); — id рублики
$cat_name = get_query_var('category_name'); — ярлык рублики

$tag_ID = get_query_var('tag_id'); — id метки
$tag_name = get_query_var('tag'); — ярлык метки

$taxonomy_name = get_query_var('taxonomy'); — название таксономии
$term_name = get_query_var('term'); — ярлык текущего элемента таксономии

Переменная в параметрах

Нужно исключить текущую метку из облака меток (в шаблоне меток), метка исключается по id:

<?php wp_tag_cloud('exclude=44'); ?>

Мы получаем переменную ID текущей метки и тут надо изменить вид параметра + обязательно двойные скобки

<?php $tag_ID = get_query_var('tag_id'); wp_tag_cloud("exclude={$tag_ID}"); ?>

Операторы сравнения

$a == $bРавно
$a === $bТождественно равно
$a != $bНе равно
$a <> $bНе равно
$a !== $bТождественно не равно
$a < $bМеньше
$a > $bБольше
$a <= $bМеньше или равно
$a >= $bБольше или равно

Тернарный оператор — ?

<?php $var_1 = 0;
$var_2 = 'true';
$var_3 = 'false';

$test = $var_1 ? $var_2 : $var_3;
echo $test; ?>

Если в переменной $var_1 true, то подставляется $var_2, если false то подставляется $var_3. В примере будет выведено false.

Получить количество записей в массиве

echo count($myposts);

Синтаксис php

.= — знак конкатенации, то есть соединения двух элементов в один.
Пример:

$a  = 1;
$a .= 2;
echo $a;
Выведет число 12 (т.к "1"."2"="12")

Из массива в строку и наоборот

Функции implode и explode служат для противоположных целей. implode превращает массив в строку, а explode строку в массив.
Примеры:

$tags_str = implode(',', $tags); // Объединяет элементы массива в строку
$tags_arr = explode(',', $tags); // Разбивает строку с помощью разделителя

Регулярные выражения

Если нам нужно динамически менять окончание слова в зависимости от числительного нам понадобится функция регулярного выражения. Прописываем саму функцию:

function plural_form($number, $after) {
	$cases = array (2, 0, 1, 1, 1, 2);
	echo $number.' '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}

Можно сделать функцию без вывода самого числа

function plural_form_2($number, $after) {
	$cases = array (2, 0, 1, 1, 1, 2);
	echo $after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}

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

<?php if ($wp_query->found_posts == 0) {
	echo 'Нет записей удовлетворяющих запросу';
} else {
	echo 'В основном запросе ';
	plural_form(
		$wp_query->found_posts,
		/* варианты написания для количества 1, 2 и 5 */
		array('запись','записи','записей')
	);
} ?>

Собрать массив терминов

Для того чтобы собрать массив терминов, при переборке другого массива создаем контейнер для массива.
В данном примере мы перебираем записи определенной категории, и у каждой записи проверяем принадлежность термина таксономии brend и записываем их в переменную — $all_brends_ids[].

$poductcatid = get_queried_object_id();
        
$args = array(
	'numberposts' => 5,
	'tax_query' => array(
		array(
			'taxonomy' => 'product_cat',
			'field' => 'id',
			'terms' => $poductcatid
		),
	),
	'post_type'   => 'product'
);

$posts = get_posts( $args );

foreach($posts as $post){ setup_postdata($post);
	$brends_id = wp_get_object_terms($post->ID, 'brend');
			
	foreach ($brends_id as $brend_id) :
		$all_brends_ids[] = $brend_id->term_id;
	endforeach;
	  
	$all_brends_unique = array_unique($all_brends_ids);      
}

wp_reset_postdata();

Чтобы из получившегося массива оставить только уникальные (не повторяющиеся) термины нужно прогнать массив через функцию array_unique.

Проверка: пустая ли переменная

if (empty($unit)) { переменная пуста }

Можно поменять на противоположное значение !empty($unit), т.е. непустой массив.

if (isset($unit)) { переменная определена}

Извлечь первый элемент массива

$brands = get_the_terms( $post->ID, 'pa_brand' );
$brand = array_shift($brands);

Арифметические операторы

+$aИдентичность*
-$aОтрицание (смена знака)
$a + $bСложение
$a — $bВычитание
$a * $bУмножение
$a / $bДеление
$a % $bДеление по модулю**
$a ** $bВозведение в степень

* Конвертация $a в int или float, что более подходит
** Целочисленный остаток от деления $a на $b

Разрядность

Вывод числовых значений (например стоимость) с разрядностью на тысячи, миллионы и т.д.:

<?php echo number_format($number, 0, '', ' '); ?>

Оставить в строке только числа

$str1 = "Строка, в которой присутствуют цифры 12345";
$str = preg_replace("/[^0-9]/", '', $str1);
echo $str; // выведется только 12345

Проверка функции mail

Вставляем в шаблон любой страницы и переходим на нее

<?php if (mail("test@mail.ru", "заголовок", "текст")) { echo 'Отправлено'; } else { echo 'Не отправлено'; } ?>
[site-socialshare]
  • Комментарии
  • Вложения

Добавить комментарий

Notice: Функция WP_Styles::add вызвана неправильно. Стиль с дескриптором "editor-buttons" был поставлен в очередь с незарегистрированными зависимостями: dashicons. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.9.1.) in /home/t/tiberi6w/opttour.ru/public_html/wp-includes/functions.php on line 6170

Пока нет комментариев. Будь первым!

PHP
Сортировка постов (по дате, по заголовку, по дате изменений)
Рекомендации для васСортировка постов (по дате, по заголовку, по дате изменений)Opttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.