Ответы пользователя по тегу WordPress
  • Как вызвать 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 );
    Ответ написан
    Комментировать
  • Как скрыть определенный класс в Wordpress?

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

    if ( current_user_can( 'manage_options' ) ) {
    	// Информация только для админа
    }
    Ответ написан
    Комментировать
  • Как в WordPress получить список категорий со свежими записями в них?

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

    Я бы пошел таким путем: на хуке save_post мы можно добавлять свежие термины записи в начало массива с помощью array_unshift()

    add_action( 'save_post', 'update_fresh_terms' );
    if ( ! function_exists( 'update_fresh_terms' ) ) {
    	function update_fresh_terms( $post_id ) {
    
    		if ( $_POST['post_type'] === 'post' ) {
    			$fresh_terms = get_option( '_fresh_category', array() );
    
    			// Получаем термины текущего поста.
    			$terms = get_the_terms( $post_id, 'category' );
    
    			if ( is_array( $terms ) ) {
    				foreach ( $terms as $key => $term ) {
    					array_unshift( $fresh_terms, $term->term_id ); // Добавляем id новых терминов в начало массива.
    				}
    			}
    
    			$fresh_terms = array_unique( $fresh_terms );
    
    			update_option( '_fresh_category', $fresh_terms );
    		}
    	}
    }


    Получить термины для использования можно с помощью нативной get_option(). Или же можно создать дополнительную функцию, которая при первом использовании, когда массив с терминами еще пустой, будет делать запрос всех постов из базы и собирать массив терминов по «свежести»

    if ( ! function_exists( 'get_fresh_terms' ) ) {
    	function get_fresh_terms( $count = 5, $post_type = 'post', $term_name = 'category' ) {
    
    		$fresh_terms = get_option( '_fresh_' . $term_name, array() );
    
    		if ( empty( $fresh_terms ) ) {
    
    			// Задаем нужные нам критерии выборки данных из БД.
    			$args = array(
    				'posts_per_page' => -1,
    				'post_type'      => $post_type,
    			);
    
    			$posts = get_posts( $args );
    
    			foreach ( $posts as $key => $post ) {
    
    				// Получаем термины текущего поста.
    				$terms = get_the_terms( $post->ID, $term_name );
    
    				if ( is_array( $terms ) ) {
    					foreach ( $terms as $key => $term ) {
    						$fresh_terms[] = $term->term_id;
    					}
    				}
    			}
    
    			$fresh_terms = array_unique( $fresh_terms );
    		}
    
    		// Если запрос не дал ни одной категории, возвращаем false.
    		if ( empty( $fresh_terms ) ) {
    			return false;
    		} else {
    			update_option( '_fresh_' . $term_name, $fresh_terms );
    		}
    
    		return $fresh_terms;
    	}
    }
    Ответ написан
    1 комментарий
  • HTML-карта сайта - Как вывести родительские, дочерние и остальные страницы?

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

    // Задаем нужные нам критерии выборки данных из БД.
    $args = array(
    	'posts_per_page' => -1,
    	'post_type'      => 'page',
    );
    
    $pages   = get_posts( $args );
    $outer   = array();
    $parents = array();
    
    // Собираем списки страниц в отдельный массив.
    foreach ( $pages as $key => $page ) {
    
    	$outer[ $page->post_parent ][ $page->ID ]['title'] = $page->post_title;
    	$outer[ $page->post_parent ][ $page->ID ]['link']  = get_permalink( $page->ID );
    
    	$parents[] = $page->post_parent;
    
    }
    
    echo '<div class="row">';
    
    // Основной цикл.
    foreach ( $outer as $key => $inner ) {
    	echo '<div class="article-column col-12 col-sm-6 col-lg-4 col-xl-3">';
    
    		// Верхний заголовок без ссылки.
    		if ( $key === 0 ) {
    			echo '<h3>Остальные страницы</h3>';
    		} else {
    			echo '<h3>' . $outer[0][ $key ]['title'] . '</h3>';
    		}
    
    		echo '<ul class="article-list">';
    			foreach ( $inner as $key => $value ) {
    				if ( ! in_array( $key, $parents, true ) ) {
    					echo '<li class="article-list--item">';
    						echo '<a class="article-list--link" href="' . $value['link'] . '">' . $value['title'] . '</a>';
    					echo '</li>';
    				}
    			}
    		echo '</ul>';
    	echo '</div>';
    }
    
    echo '</div>';
    Ответ написан
    4 комментария
  • Где взять счётчик читателей Wordpress для каждого автора?

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



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

    Если по каким-то причинам вас не устраивают эти плагины, то есть еще один способ — вместо плагина вы можете доставать данные с Api Яндекс Метрики или Гугл Аналитики и выводить их как и где вам нужно
    Ответ написан
  • Как сортировать грамотно записи WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете распарсить заголовок регулярками, положить значение int в мета-поле и сортировать по этому значению, как по числу. Тогда сортировка точно будет работать корректно
    Ответ написан
    2 комментария
  • Как изменить строку над хедером?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    do_action() — это не файл, это хук, на который можно подключить php-функцию с помощью add_action(). Потенциально подключаемая функция может находиться в любом файле проекта, воспользуйтесь поиском по файлам, чтобы не гадать

    PS. Номер телефона я бы все же внимательнее поискал в настройках, эта опция должна где-то изменяться
    Ответ написан
    Комментировать
  • Как в кастомной таксономии сделать выделение активной категории?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можете проверять текущий объект через get_queried_object()

    $categories = get_categories( array( 'taxonomy' => 'work-products', 'hide_empty' => false ) );
    foreach ( $categories as $key => $cat ) {
    	if ( get_queried_object_id() === $cat->term_id ) {
    		echo '<a class="active" href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
    	} else {
    		echo '<a href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
    	}
    }
    Ответ написан
    Комментировать
  • Как выполнить php скрипт после редиректа wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Передавайте гет-параметр в ссылке
    Ответ написан
  • На чем проще сделать магазин, на opencart или wordpress?

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


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

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    По умолчанию в WordPress нет никакого счетчика просмотров. Этот функционал добавляет либо тема, либо плагин. В вашем случае вероятнее всего это зависит от выбранной темы. Их писали разные разработчики, которые использовали разные названия мета-полей, способ их получения и вывода во фронт
    Ответ написан
    Комментировать
  • Как спрятать последний пост WP?

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

    function wpb_exclude_from_main_query( $query ) {
    
    	if ( ! is_admin() && $query->is_main_query() ) {
    
    		$args = array(
    			'numberposts' => 1,
    			'post_type'   => 'post',
    			'post_status' => 'publish',
    		);
    
    		$recent_posts = wp_get_recent_posts( $args );
    
    		if ( is_array( $recent_posts ) && ! empty( $recent_posts ) ) {
    
    			$exclude_ids = array();
    
    			foreach ( $recent_posts as $key => $recent_post ) {
    				$exclude_ids[] = $recent_post['ID'];
    			}
    
    			$query->set( 'post__not_in', $exclude_ids );
    		}
    	}
    }
    add_action( 'pre_get_posts', 'wpb_exclude_from_main_query' );
    Ответ написан
    3 комментария
  • Как скрыть категорию в portfolio в wordpress-е ??

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Кроме того, что return $query делать не обязательно, код написан корректно. Вероятно, что портфолио у вас не категория, а произвольная таксономия. В этом случае аргумент category__not_in не сработает, для таксономии нужно писать массив tax_query

    Еще одна из вероятных причин в том, что вы находитесь не на странице, которая отвечает проверке is_home(). Этот условный тег проверяет показывается ли страница с последними постами, зависит от настроек параметров Чтение → Показывать последние записи сайта
    Ответ написан
    2 комментария
  • Как убрать с сайта страницу рубрики?

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

    Во-вторых, в WordPress по умолчанию нет такой таксономии review и если вы используете для отзывов какой-то плагин, то об этом стоило в вопросе упомянуть, а вопрос адресовать в техподдержку плагина
    Ответ написан
  • Как удалить кеш всем юзерам wordpress сайта?

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

    Удобнее всего передавать в этот параметр значение функции filemtime(), которая возвращает время последнего изменения файла

    function common_scripts() {
    	wp_enqueue_style( 'common-styles', get_theme_file_uri( 'assets/css/common.min.css' ), array(), filemtime( get_theme_file_path( '/assets/css/common.min.css' ) ) );
    
    	wp_enqueue_script( 'common-scripts', get_theme_file_uri( 'assets/js/common.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/common.min.js' ) ), true );
    }
    add_action( 'wp_enqueue_scripts', 'common_scripts' );
    Ответ написан
    Комментировать
  • Как отобразить гистограмму статистики посетителей страницы wordpress в frontend?

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



    Если вас не устраивает именно вид отображения этих данных, вы можете просто посмотреть как именно плагин хранит эти данные в базе и написать свои графики на основе каких-то библиотек для отрисовки графиков и гистограм, например Google Chart API

    Еще один способ — вместо плагина вы можете доставать данные с Api Яндекс Метрики или Гугл Аналитики и отрисовывать данные точно также, с помощью какой-то js-библиотеки
    Ответ написан
  • Как перенести сайт с одной CMS на другую?

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

    Еще один вариант — найти способ экспортировать данные с исходного сайта в csv и импортировать их в WordPress с помощью какого-то плагина, например WP All Import, так вы сможете контролировать какие данные в какие поля импортировать
    Ответ написан
    Комментировать
  • Как в WordPress опубликовать запись "виртуально"?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    При регистрации типа записи с помощью функции register_post_type() вы можете указать общий аргумент public => false или publicly_queryable => false. При false записи этого типа будут недоступны во фронт-энде через обычные URL запросы и на запрос к текущему типу записи вы увидите 404 страницу

    Не совсем понятно как вы хотите убрать ссылки на записи с фронта, но оставить их в поиске, впрочем есть аргумент exclude_from_search => false, вы можете поэксперементировать

    Для функции регистрации таксономии register_taxonomy() есть точно такие же аргументы для этой механики
    Ответ написан
  • Как изменить код страницы на WordPress?

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