Ответы пользователя по тегу WordPress
  • Почему ERR_TOO_MANY_REDIRECTS при инсталляции Wordpress?

    yaleksandr89
    @yaleksandr89
    PHP developer
    Без настроек вирт.хоста проблематично с уверенностью что-то говорить. Но с подобной ошибкой встречался, когда был настроен некорректный редирект с HTTP -> HTTPS.

    В моем случае виновником оказался конфиг виртуального хоста, который зацикливал редирект с https://www.site.com на https://site.com.
    Ответ написан
    Комментировать
  • Как исключить из карты сайта (Yoast SEO) определенную рубрику у постов?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Возможно кому пригодится:
    /** @var WP_Post $obj */
    add_filter( 'wpseo_sitemap_entry', function ( $url, $string, $obj ) {
    	/** @var WP_Term $category */
    	$category = get_the_category( $obj->ID )[0];
    	if ( $category->slug !== 'press-center' ) {
    		return $url;
    	}
    
    	return null;
    }, 10, 3 );
    Ответ написан
    Комментировать
  • Как получить ссылку на архив закрепленной за постом таксономии в Wordpress?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Решил вопрос создав фильтр:
    Фильтр:
    add_filter( 'test_term_url', static function ( string $nameTaxonomy, string $termSlug ) {
    	$terms = get_terms( [
    		'taxonomy'   => $nameTaxonomy,
    		'hide_empty' => true,
    		'slug'       => $termSlug,
    	] );
    	$terms = array_shift( $terms );
    
    	return get_term_link( $terms );
    }, 10, 2 );

    Вызов фильтра:
    <?= apply_filters('test_term_url', 'type-work', 'clients' ) ?>
    Ответ написан
    Комментировать
  • Как сделать шорткод для вывода записи по id - add_shortcode?

    yaleksandr89
    @yaleksandr89
    PHP developer
    В свое время реализовывал вывод календаря на странице с помощью шорткода, календарь тоже был сделан через custom types.
    Сделал по статье на wp-kama, если больше нравится видеогайды вот плейлист, тут доскональна объяснен вопрос шорткодов в WP.
    Ответ написан
    Комментировать
  • Wordfence нашел вредоносный код в файле wp-includes/load.php.orig. Можно его удалить?

    yaleksandr89
    @yaleksandr89
    PHP developer
    Вот стандартный файл load.php из репозитория WordPress.
    Вот описание, что в него входит.

    Если вы видите код, которого нет в стандартном файле load.php из репозитория WordPress, скорей всего вирусня.

    Напрямую файлы движка никто не редактирует (в здравом уме и трезвой памяти), так как при очередном обновление будет перезаписаны.

    P.S. проверил у себя на проекте wp-includes/, присутствует только файл wp-load.php (файла wp-load.php.orig нет)
    Ответ написан
    Комментировать
  • Как изменить структуру (разметку) паганации?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    За неимением готовых решений пришлось слепить свое :).

    Может кому пригодиться, в принципе, если скорректировать массив $replaceто можно реализовать любую разметку пагинации.
    функция ya_custom_navigation

    function ya_custom_navigation() {
    	$nav     = get_the_posts_pagination();
    	$search  = [
    		'screen-reader-text',
    		'<nav class="navigation pagination" role="navigation">',
    		'<div class="nav-links">',
    		'</div>',
    		'<a class=\'page-numbers\'',
    		'<a class="prev page-numbers"',
    		'<a class="next page-numbers"',
    		'</a>',
    		'<span aria-current=\'page\' class=\'page-numbers current\'>',
    		'<span class="page-numbers dots">',
    		'</span>',
    		';<span class="sr-only">(current)</span></span></li>'
    	];
    	$replace = [
    		'screen-reader-text small-title',
    		'<nav>',
    		'<ul class="pagination justify-content-center">',
    		'</ul>',
    		'<li class="page-item"><a class="page-link"',
    		'<li class="page-item"><a class="page-link"',
    		'<li class="page-item"><a class="page-link"',
    		'</a></li>',
    		'<li class="page-item active"><span aria-current="page" class="page-link">',
    		'<li class="page-item disabled"><span class="page-link">',
    		'<span class="sr-only">(current)</span></span></li>',
    		';</span></li>'
    	];
    	$nav  = str_replace( $search, $replace, $nav );
    	return $nav;
    }



    Из стандартной html разметки:
    <nav class="navigation pagination" role="navigation">
        <h2 class="screen-reader-text">Навигация по записям</h2>
        <div class="nav-links">
            <span aria-current='page' class='page-numbers current'>1</span>
            <a class='page-numbers' href='http://ya.loc/blog/page/2/'>2</a>
            <span class="page-numbers dots">&hellip;</span>
            <a class='page-numbers' href='http://ya.loc/blog/page/4/'>4</a>
            <a class="next page-numbers" href="http://ya.loc/blog/page/2/">Далее</a></div>
    </nav>


    Делает, разметку, согласно разметки bootstrap 4.3:
    <nav>
        <h2 class="screen-reader-text small-title">Навигация по записям</h2>
        <ul class="pagination justify-content-center">
            <li class="page-item active">
                <span aria-current="page" class="page-link">1<span class="sr-only">(current)</span></span>
            </li>
            <li class="page-item">
                <a class="page-link" href='http://ya.loc/blog/page/2/'>2</a>
            </li>
            <li class="page-item disabled">
                <span class="page-link">&hellip;</span>
            </li>
            <li class="page-item">
                <a class="page-link" href='http://ya.loc/blog/page/4/'>4</a>
            </li>
            <li class="page-item">
                <a class="page-link" href="http://ya.loc/blog/page/2/">Далее</a>
            </li>
        </ul>
    </nav>


    5d45aa28eae8b174933952.png
    Ответ написан
    Комментировать
  • Не корректно отрабатывает отчистка wp_terms при удаление плагина. Как исправить?

    yaleksandr89
    @yaleksandr89
    PHP developer
    Попробуй такой вариант:
    1. Сначала выполнить удаление записей:
    *функция удаления записей по post_typy*

    2. Первые два запроса к таблице 'term_taxonomy' перемести в самый низ:
    ...
    
            $wpdb->query("DELETE FROM $terms WHERE term_id IN (SELECT term_id FROM $term_taxonomy WHERE count = 0 )");
            $wpdb->query("DELETE FROM $term_taxonomy WHERE term_id NOT IN (SELECT term_id FROM $terms");
            $wpdb->query("DELETE FROM $term_relationships WHERE term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM $term_taxonomy)");
    
            $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='rooms'");
            $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='floors'");
    }


    Ну и вызови их, сначала
    remove_type_flats(), потом drop_custom_table().

    Должно сработать.
    Ответ написан
    1 комментарий
  • Как связать events и single-events (Иерархия шаблонов)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Нашел решение, может кому-то ещё пригодиться. Мой метод будет работать только в одном случае иные варианты исключены (это касается привязки не только по слагу, но и по ID).

    Решение: создать фильтр через "template_include"

    Исходные данные: в папке /calendar/ лежат два файла:
    • events.php - выводит общий список постов произвольного типа записей events
    • event.php - выводит конкретное событие


    add_filter('template_include', 'my_template');
    function my_template($template)
    {
    global $post;
    if( $post->post_type == 'events' ){
    return get_stylesheet_directory() . '/calendar/event.php';
    }
    return $template;
    }
    Ответ написан
    Комментировать