Задать вопрос
  • Как называется хук в seo yast, который получает мета из админки или который добавляет мета на страницу?

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

    Ближе к делу: перебирая разные варианты работы с yoast я в конце концов остановился на том, что при установке меняю все поля "SEO-заголовок" и "Мета-описание" в разделе "Отображение в поисковой выдаче" на %%InsteadTitle%% и %%InsteadDescription%%

    После чего подключаю свой файл в тему, где создаю эти переменные и собираю их так, как мне нужно — чаще всего заголовки и описания берутся из excel или лежат в пост-мете (даты проведения мероприятия, характеристики товара). Болванка выглядит так:

    // Заголовки
    function get_seo_instead_title() {
    
    	$string = '';
    
    	if ( is_archive() ) {
    		// берем сео-заголовки из excel-таблицы
    	}
    
    	if ( is_single() ) {
    		// собираем сео-заголовки из get_the_title() и get_post_meta()
    	}
    
    
    	if ( $string == '' ) {
    		if ( is_home() || is_front_page() ) {
    			$string = get_bloginfo( 'name' ) . ' — ' . get_bloginfo( 'description' );
    		} elseif ( is_post_type_archive() ) {
    			$string = get_queried_object()->label;
    		} elseif ( is_archive() ) {
    			$string = get_queried_object()->name;
    		} else {
    			$string = get_the_title();
    		}
    	}
    
    	return $string;
    
    }
    
    
    // Описания
    function get_seo_instead_description() {
    
    	$string = '';
    
    	if ( is_single() ) $string = get_the_excerpt();
    
    	if ( $string == '' ) {
    		$string = 'Какое-то дефолтное описание для всех страниц, если его нет';
    	}
    
    	return $string;
    
    }
    
    // Регистрируем переменные
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%InsteadTitle%%', 'get_seo_instead_title', 'advanced', 'Some instead title text' );
    	wpseo_register_var_replacement( '%%InsteadDescription%%', 'get_seo_instead_description', 'advanced', 'Some instead title text' );
    }
    
    // Add action
    add_action('wpseo_register_extra_replacements', 'register_custom_yoast_variables');
    Ответ написан
    Комментировать
  • Как добавить класс к ARTICLE, если он для отрывка (excerpt) Wordpress?

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

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

    Если в теге <article> есть функция post_class(), то можно добавить класс через фильтр

    // добавляем классы для мероприятий
    add_filter( 'post_class', 'add_post_classes' );
    function add_post_classes( $classes ) {
    
    	if ( get_post_type() === 'event' ) {
    		$classes[] = 'article-event';
    	}
    
    	return array_unique( $classes );
    }
    Ответ написан
  • Почему не переводится время из UNIX на php?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    $string = '1629621000';
    $date = date( "F d Y h:i:s e o", $string );
    var_dump( $date ); // August 22 2021 08:30:00 UTC 2021
    Ответ написан
    Комментировать
  • Рассылка писем о новой записи Wordpress, какие есть бесплатные варианты?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете написать небольшой код, который при помощи функции mail() или wp_mail() будет отправлять сообщения. Но письма могут попадать в спам, нужно настраивать SMTP
    Ответ написан
    Комментировать
  • Как применить стили ко всем потомкам с заданным классом кроме последнего?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    .block {
    	margin-top: 0;
    	&:not(:last-child) {
    		margin-bottom: 40px;
    	}
    }
    Ответ написан
  • Для чего нужны CMS веб-разработчику?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    CMS нужна не столько разработчику, сколько заказчику. Заказчик, как правило, не умеет работать с кодом и ему нужна удобная система управления контентом на сайте

    Я бы советовал начать делать собственный сайт, а после него еще несколько. Работая над практическими задачами вы быстрее поймете как настраивать админ панель, какие плагины удобнее и наработаете базу своих часто используемых решений
    Ответ написан
    Комментировать
  • Можно ли создать произвольные типы записей с подзаголовками?

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

    Я советую посмотреть в сторону google sheets api или обработчика обычного excel. Раньше я пользовался старой библиотекой PHPExcel, но она тяжелая, а когда стала сыпать ошибки, то я нашел более простой и легкий вариант SimpleXLSX. Единственные минус последней - она не умеет писать в excel, но мне и не надо
    Ответ написан
    Комментировать
  • Почему не работает вывод категории записи?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    get_the_category() не будет работать потому что у вас не категории, а кастомные таксономии. Используйте get_the_terms()

    $cur_terms = get_the_terms( get_the_ID(), 'super_grill_recipes_categories' );
    if( is_array( $cur_terms ) ) {
    	echo '<ul class="term-list">';
    	foreach( $cur_terms as $cur_term ){
    		echo '<li class="term-list__item">';
    			echo '<a class="term-list__link" href="'. get_term_link( $cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>';
    		echo '</li>';
    	}
    	echo '</ul>';
    }
    Ответ написан
    Комментировать
  • Как вставить строку перевода в php код?

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

    if ( is_plugin_active( 'polylang/polylang.php' ) ) {
    	$sale = pll__( 'Скидка' );
    } else {
    	$sale = esc_html__( 'Sale!', 'woocommerce' );
    }
    
    echo apply_filters( 'woocommerce_sale_flash', '<span class="onsale">' . $sale . '</span>', $post, $product );
    Ответ написан
    Комментировать
  • Как подключить стили и cкрипты в дочерней теме wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Хук называется wp_enqueue_scripts, а не wp_enqueue_script

    Для подключения файлов есть отличная функция get_theme_file_uri(), которая проверяет наличие файла перед подключением, это довольно удобно

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

    add_action( 'wp_enqueue_scripts', 'my_scripts_slider' );
    function my_scripts_slider() {
    	wp_enqueue_script( 'chifslider1', get_theme_file_uri( 'chifslider/chief-slider.dev.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-slider.dev.js' ) ) );
    	wp_enqueue_script( 'chifslider2', get_theme_file_uri( 'chifslider/chief-int.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-int.js' ) ) );
    };


    Подробнее о работе с подключением файлов смотрите здесь
    Ответ написан
    Комментировать
  • Как удалить мета тег robots?

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

    Управлять работой этого тега вы можете с помощью одноименного фильтра wp_robots. Например, код ниже добавит noindex на архивные страницы на которых нет постов

    add_filter( 'wp_robots', 'custom_wp_robots' );
    function custom_wp_robots( $robots ) {
    
    	if ( is_archive() && !have_posts() ) {
    		$robots['noindex'] = true;
    		$robots['nofollow'] = true;
    	}
    	
    	return $robots;
    }
    Ответ написан
    Комментировать
  • Как вывести два сайдбара на одной странице??

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

    • Функции wp_mobile() нет, есть wp_is_mobile()
    • С этой функцией все равно не работают большинство плагинов кеширования
    • Стилизацию сайта на мобильной и десктопной версии лучше делать с помощью медиа-запросов в css, тем более у вас сайдбары визуально даже не отличаются
    • С Woocommerce лучше работать с помощью системы хуков и фильтров и только в последнюю очередь изменять шаблоны в теме
    Ответ написан
  • Почему при клике на пользователя меня перебрасывает не на личную страницу?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    404 у вас не из-за этого, эта опция не влияет на кастомные запросы WP_Query(). Скорее всего вы не правильно выводите пагинацию на странице. Приложите весь код или сделайте по этому гайду
    Ответ написан
  • Как wp_insert_post добавить созданный запись к определённой категории?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Для таксономий нужно использовать 'tax_input', а не 'post_category'

    $post_data = array(
    	'post_type' => 'proconnect',
    	'post_title' => 'testPost',
    	'post_status' => 'publish',
    	'post_author' => 1,
    	'tax_input' => array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ),
    );
    $post_id = wp_insert_post( $post_data );
    Ответ написан
    Комментировать
  • Легально ли делать подобные сайты, какие будут последствия?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вы можете подсмотреть как легально сделаны сайты табачных компаний (или алкогольных)
    Ответ написан
    Комментировать
  • Best practices при расчете периодических/повторяющихся событий?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Эти данные можно вообще не хранить, с помощью strtotime() можно указывать относительные форматы даты/времени

    // первый день этого месяца
    echo gmdate('F j, Y', strtotime( 'first day of this month') ); // August 1, 2021
    
    // последний день декабря текущего года
    echo gmdate('F j, Y', strtotime( 'last day of december this year' ) ); // December 31, 2021
    
    // понедельник на следующей неделе
    echo gmdate('F j, Y', strtotime( 'Monday next week' ) ); // August 16, 2021
    
    // следующий четверг
    echo gmdate('F j, Y', strtotime( 'next Thursday' ) ); // August 19, 2021
    
    // второй четверг этого месяца
    echo gmdate('F j, Y', strtotime( 'second thursday of this month' ) ); // August 12, 2021
    
    // +10 дней к дате
    echo gmdate('F j, Y', strtotime( '10 September 2000 + 10 days') ); // September 20, 2000
    Ответ написан
    Комментировать
  • Почему при редиректе выдаёт 404?

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

    6116349b20137868964400.png
    Ответ написан
    Комментировать
  • Как изменить url первой страницы пагинации Wordpress?

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

    • Ищешь в коде функцию, которая выводит пагинацию, разбираешься принимает ли она аргументы, позволяющие ее кастомизировать
    • Если нет, на ее основе пишешь свою пагинацию так, как тебе надо
    • Ставишь тег canonical
    • Ставишь 301 редирект


    PS. Кнопки Первая 1 выглядят бредово
    Ответ написан
    Комментировать
  • Как вывести метаполя на странице автора, если ему присвоена определенная роль?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( is_user_role( 'custom_role' ) ) {
    	echo '<p>' . get_user_meta( get_current_user_id(), 'custom_meta', true )  . '</p>';
    }
    Ответ написан
    Комментировать