Ответы пользователя по тегу PHP
  • Как добавить третье условие в коде?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( is_front_page() && count( $posts ) > 0 && get_queried_object_id() === 320 ) {
    	// code...
    }
    Ответ написан
    Комментировать
  • Как создать страницу для всех записей из Custom Post Type?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Для архивной страницы работает шаблон archive-{post_type}.php, т.е. в вашем случае archive-projects.php. Подробнее см. Иерархию шаблонов WP

    P.S. При регистрации post type логичнее называть его в единственном числе — project, а архивную страницу во множественном — projects
    Ответ написан
  • Как добваить данные из файла csv в таблицу wordpress через php?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Я пользуюсь библиотекой SimpleXLSX. Базовый пример:

    $file_import = get_stylesheet_directory() . '/data/baza.xlsx';
    
    if ( $xlsx = SimpleXLSX::parse( $file_import ) ) {
    	$excel = $xlsx->rows(0);
    
    	foreach ( $excel as $key_r => $excel_row ) {
    		// rows.
    		foreach	( $excel_row as $key_c => $excel_col ) {
    			// cols.
    		}
    	}
    }


    Кроме этого в WordPress есть встроенный импорт/экспорт, вы можете посмотреть и разобраться как он работает и сделать так же
    Ответ написан
  • Как правильно добавить произвольный PHP-код в functions.php в WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если вы пытаетесь текущий запрос для создания ссылки, то она находится в $wp->request

    global $wp;
    echo $wp->request;
    echo trailingslashit( home_url( $wp->request ) );
    Ответ написан
    Комментировать
  • Как правильно вывести строку через условные теги WordPress и условные операторы?

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

    $separator = '|';
    
    // Title prefixes.
    if ( is_post_type_archive() ) {
    	$title[] = _x( 'Archives:', 'post type archive title prefix', 'wpgen' );
    } elseif ( is_category() ) {
    	$title[] = _x( 'Category:', 'category archive title prefix', 'wpgen' );
    } elseif ( is_tag() ) {
    	$title[] = _x( 'Tag:', 'tag archive title prefix', 'wpgen' );
    } elseif ( is_author() ) {
    	$title[] = _x( 'Author:', 'author archive title prefix', 'wpgen' );
    } elseif ( is_date() ) {
    	if ( is_year() ) {
    		$title[] = _x( 'Year:', 'date archive title prefix', 'wpgen' );
    	} elseif ( is_month() ) {
    		$title[] = _x( 'Month:', 'date archive title prefix', 'wpgen' );
    	} elseif ( is_day() ) {
    		$title[] = _x( 'Day:', 'date archive title prefix', 'wpgen' );
    	}
    } elseif ( is_tax( 'post_format' ) ) {
    	if ( is_tax( 'post_format', 'post-format-aside' ) ) {
    		$title[] = _x( 'Asides', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
    		$title[] = _x( 'Galleries', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
    		$title[] = _x( 'Images', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
    		$title[] = _x( 'Videos', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
    		$title[] = _x( 'Quotes', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
    		$title[] = _x( 'Links', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
    		$title[] = _x( 'Statuses', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
    		$title[] = _x( 'Audio', 'post format archive title', 'wpgen' );
    	} elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
    		$title[] = _x( 'Chats', 'post format archive title', 'wpgen' );
    	}
    }
    
    // Main title.
    if ( is_single() || is_page() ) {
    	$title[] = get_the_title();
    } elseif ( is_404() ) {
    	$title[] = __( 'Page not found', 'wpgen' );
    } elseif ( is_search() ) {
    	$title[] = sprintf( __( 'Search Results for “%s”', 'wpgen' ), get_search_query( false ) );
    } elseif ( is_post_type_archive() ) {
    	$title[] = get_queried_object()->label;
    } elseif ( is_author() ) {
    	$title[] = get_queried_object()->display_name ?? '';
    } elseif ( is_date() ) {
    	if ( is_year() ) {
    		$title[]  = get_the_date( 'Y' );
    	} elseif ( is_month() ) {
    		$title[]  = get_the_date( 'F Y' );
    	} elseif ( is_day() ) {
    		$title[]  = get_the_date( 'F j, Y' );
    	}
    } elseif ( is_archive() ) {
    	$title[] = get_queried_object()->name;
    }
    
    // Add site info in the title.
    if ( ! isset( $title ) ) {
    	$title[] = get_bloginfo( 'name' );
    	$title[] = $separator;
    	$title[] = get_bloginfo( 'description' );
    } else {
    
    	if ( is_paged() ) {
    		$title[] = $separator;
    		$title[] = __( 'Page', 'wpgen' ) . ' ' . $paged;
    	}
    
    	$title[] = $separator;
    	$title[] = get_bloginfo( 'name' );
    }
    
    $title = implode( ' ', $title );
    Ответ написан
    4 комментария
  • Как сделать разные дизайны для разных категории на Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Лично я стандартные записи использую только для новостей и статей, а услуги, эвенты и другие, обособленные типы контента регистрирую с помощью register_post_type() и register_taxonomy()

    На архивной странице archive.php посты выводятся с подключением шаблонов вида

    get_template_part( 'templates/archive/post', get_post_type() );


    Т.е. WP пытается использовать файлы post-service.php или post-event.phpб а при их отсутствии подключает базовый post.php

    Для изменения шаблона архивной страницы нужно создать в корне файл taxonomy-{taxonomy}.php или archive-{post_type}.php в зависимости что вам нужно, подробнее в смотрите иерархию шаблонов

    Глобальный запрос постов находится в global $wp_query, если его нужно отфильтровать, то используйте хук pre_get_posts

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

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

    $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
    $image_url    = wp_get_attachment_url( $thumbnail_id );


    Если функция get_woocommerce_term_meta() не работает, используйте get_term_meta() вместо нее

    $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
    $image_url    = wp_get_attachment_url( $thumbnail_id );
    Ответ написан
    Комментировать
  • Передать шорткод из functions php в html?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $out = '';
    $out .= '<div class="main__item">';
    	$out .= do_shortcode( '[breadcrumb]' );
    	$out .= '<a href="' . get_permalink() . '" class="main__img">';
    		$out .= get_the_post_thumbnail();
    	$out .= '</a>';
    $out .= '</div>';
    $items[] = $out;
    Ответ написан
  • Как изменить количество записей wordpress, зависимо от ширины экрана?

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

    Можете получить 10 записей и, в зависимости от ширины экрана, скрывать лишние или можете получить 5 записей, а если ширина экрана больше 1000px, то ajax-запросом получить из БД еще

    Учитывайте, что оба варианта вызовут большие проблемы с пагинацией записей

    В WordPress есть функция wp_is_mobile(), которая проверяет переменную HTTP_USER_AGENT по ключевым словам на наличие мобильного устройства у пользователя, но на нее нельзя полагаться на 100%
    Ответ написан
  • Как определить локацию юзера по IP и показать это на карте?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть плагин Geolocation IP Detection, судя по описанию вы можете получить информацию по IP пользователя с помощью функции geoip_detect2_get_info_from_current_ip()

    Яндекс карты хорошо определяют положение пользователя. Тут пример как это делать по IP и по браузеру https://yandex.ru/dev/maps/jsbox/2.1/geolocation
    Ответ написан
    Комментировать
  • При подключений PHP файлов сайт не работает, как можно исправить?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    При подключений PHP файлов сайт не работает


    Значит файла по подключаемому пути не существует

    сами php файлы у меня в директории сайта находятся


    В WordPress кастомные файлы не должны лежать в директории сайта. Для этого существует папка с вашей темой и плагины. В functions.php файлы подключатся следующим образом

    require_once ( ABSPATH . 'wp-admin/includes/plugin.php' );
    require_once get_stylesheet_directory() . '/includes/setup.php';
    Ответ написан
  • Как вызвать php function из functions.php wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    footer.php — это шаблон подвала, а functions.php — файл с основными функциями, где им и место. Настоятельно советую вам посмотреть как сделаны стандартные темы twenty или любые популярные, а то у вас слишком странные вопросы
    Ответ написан
    Комментировать
  • Как вызвать JS скрипт из functions.php?

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

    wp_enqueue_script( 'masonry' );
    
    $masonry_init = 'jQuery(function($) {
    	var $container = $(".masonry-gallery");
    
    	$container.imagesLoaded( function() {
    		$container.masonry({
    			columnWidth: ".masonry-item",
    			itemSelector: ".masonry-item"
    		});
    	});
    });';
    
    wp_add_inline_script( 'masonry', $masonry_init );
    Ответ написан
    Комментировать
  • Как удалить hook wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Функции добавляются на хуки с помощью add_action(), а убираются с помощью remove_action()

    remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
    remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
    Ответ написан
    Комментировать
  • Как вывести блок на определенной статье, принадлежащей определенной категории?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $cats = array();
    
    foreach ( get_the_category() as $category ) {
    	$cats[] = $category->name;
    }
    
    if ( !empty( $cats ) && in_array( 'Соборы', $cats ) ) {
    	# выводим нужный блок
    }
    Ответ написан
    Комментировать
  • Как отфильтровать записи Wordpress внутри рубрики/метки по дате?

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

    Если у вас дата заполнена в полях ACF и вы хотите сделать запрос из базы исходя из этого параметра, то для этого используется параметр meta_key запроса wp_query()

    $posts = get_posts( array(
        'post_type' => 'event',
        'meta_key'  => 'date',
        'orderby'   => 'meta_value_num',
        'order'     => 'ASC',
    ));


    Если вы находитесь в шаблоне archive.php или подобном, то вам надо провести фильтрацию глобального запроса на хуке pre_get_posts

    add_action( 'pre_get_posts', 'pre_get_events', 1 );
    function pre_get_events( $query ) {
    	if ( $query->is_post_type_archive( 'event' ) ) {
    		$query->set( 'meta_key', 'date' );
    		$query->set( 'orderby', 'meta_value_num' );
    	}
    }


    Если же вам нужно сделать кастомную сортировку по двум и более параметрам, например, с помощью фронтенд формы, то без гет-параметров не обойтись. Возможны любые варианты:

    • мойсайт.ру/2022/05/10/?tag=arbuz
    • мойсайт.ру/tag/arbuz/?date=2022-05-10


    С помощью get_query_var() проверяете наличие переменной и меняете основной запрос

    add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
    function custom_pre_get_posts( $query ) {
    	if ( $tag = get_query_var( 'tag', false ) ) {
    		$query->set( 'tag', $tag );
    	}
    }


    Если вы переживаете, что дублируются заголовки, то можете тем же самым способом с помощью get_query_var() проверять наличие переменной и подменять заголовок с описанием
    Ответ написан
    3 комментария
  • Как написать функцию на php которая будет выводить js и html?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно добавить дополнительный javascript код к зарегистрированному скрипту с помощью wp_add_inline_script(). Пример:

    add_action( 'wp_enqueue_scripts', 'masonry_init_scripts' );
    function masonry_init_scripts() {
    
    	wp_enqueue_script('masonry');
    
    	$masonry_init = 'jQuery(function($) {
    		var $container = $(".masonry-container");
    		$container.imagesLoaded( function() {
    			$container.masonry({
    				columnWidth: ".masonry-item",
    				itemSelector: ".masonry-item"
    			});
    		});
    	});';
    
    	wp_add_inline_script( 'masonry', $masonry_init );
    
    }
    Ответ написан
    Комментировать
  • Как скрыть поле если оно не заполнено?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( $ozon_ru_link = get_field( 'ozon_ru_link' ) ) {
    	echo '<a class="pokypka" href="' . $ozon_ru_link . '" rel="nofollow" target="_blank"></a>';
    }
    Ответ написан
    Комментировать
  • Как разобрать такую строку {i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}?

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

    var_dump( get_option( 'rewrite_rules', false ) );
    var_dump( get_option( 'widget_categories', false ) );
    var_dump( get_option( 'wp_user_roles', false ) );
    var_dump( get_option( 'cron', false ) );
    var_dump( get_post_meta( get_the_ID(), '_schema_json', true ) );
    Ответ написан
    2 комментария
  • Как дать комплексному полю id?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    foreach ( $states as $key => $state ) {
    	echo $key;
    }
    Ответ написан