Задать вопрос
  • Как вывести термины таксонмии по одному из значений произвольного поля?

    @Mishaermolaev Автор вопроса
    Большое спасибо вам за помощь! Сработало, но не до конца понятно, в одном случае работает, а в другом нет.

    Сработало в случае когда значением произвольного поля был чекбокс:
    $meta_query = array(
    
                        'relation' => 'OR', // не обязательно, по умолчанию 'AND'
    
                    array(
    
                        'key'     => 'account_active',
                        'value'   => '1',
                        'compare' => '=' // не обязательно, по умолчанию '=' или 'IN' (если value массив)
                    )
                );
    
    
                $terms = get_terms( array(
                    'taxonomy'      => $tax_name,
                    'meta_query'    => $meta_query,
                    'hide_empty' => false,
                ) );



    В случае когда пытался задать значение произвольного поля в виде строки — не сработало

    $meta_query = array(
    
                        'relation' => 'OR', // не обязательно, по умолчанию 'AND'
    
                    array(
    
                        'key'     => 'account_id',
                        'value'   => '-95893874',
                        'compare' => '=' // не обязательно, по умолчанию '=' или 'IN' (если value массив)
                    )
                );
    
    
                $terms = get_terms( array(
                    'taxonomy'      => $tax_name,
                    'meta_query'    => $meta_query,
                    'hide_empty' => false,
                ) );
  • Как сделать навигацию для get_terms?

    @Mishaermolaev
    get_terms в примере нужно дополнить параметром hide_empty в свежих версиях WP без него ничего не выведет

    $terms = get_terms( [
    'taxonomy' => '...' ,
    'hide_empty' => false,
    ] );
  • Как создать шаблон страницы произвольной таксономии (для вывода списка категорий в виде ссылок)?

    @Mishaermolaev
    Евгений Перин, Ваш способ работает! И не нужно мудрить с созданием страниц и присваиванием шаблонов, т.к. это плодит разные адреса страниц и пользоваться хлебными крошками нельзя, или нужно редирект ставить имея на странице шаблона и в чпу разные слаги.
  • Как создать шаблон страницы произвольной таксономии (для вывода списка категорий в виде ссылок)?

    @Mishaermolaev
    tbalero, Из хлебных крошек редирект ставили?

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

    @Mishaermolaev Автор вопроса
    Благодарю!

    Обязательно просмотрю чтобы разобраться окончательно.

    На русском языке нашел хорошее описание класса WP_Query
    https://wp-kama.ru/function/wp_query#search

    С его помощью можно решить мою задачу и много других связанных с получением данных с различными срезами.

    Обязательно кому-то пригодится.
  • Как вывести произвольные типы записей с категориями в шаблоне?

    @Mishaermolaev Автор вопроса
    /**
     * Taxonomy: Раздел.
    */
    
    function tax_izgotoviteli() {
    
        register_taxonomy( 'izgotoviteli',
            array( 'proizvoditeli'), // для какого типа записей назначается данная таксономия
            array (
                     "hierarchical" => true, // true - по типу рубрик, false - по типу меток,по умолчанию - false
    
        'labels' => array (
            "name" => "Разделы производителей", // Имя таксономии, обычно во множественном числе. По умолчанию _x( 'Post Tags', 'taxonomy general name' ) или _x( 'Categories', 'taxonomy general name' );
            "singular_name" => "Добавить раздел", // Название для одного элемента этой таксономии. По умолчанию _x( 'Post Tag', 'taxonomy singular name' ) или _x( 'Category', 'taxonomy singular name' );
            "menu_name" => "Разделы", // Текст для названия меню в левом тулбаре админки. Эта строка обозначает название для пунктов меню. По умолчанию значение параметра name;
            "all_items" => "Все  производители", // Текст для всех элементов. __( 'All Tags' ) или __( 'All Categories' );
            "edit_item" => "Изменить раздел", // Текст для редактирования элемента. По умолчанию __( 'Edit Tag' ) или __( 'Edit Category' );
            "view_item" => "Смотреть раздел",  // Текст для просмотра термина таксономии. По умолчанию: "Посмотреть метку", "Посмотреть категорию". Используется например, в админ баре (тулбаре).
            "update_item" => "Изменить", // Текст для обновления элемента. По умолчанию __( 'Update Tag' ) или __( 'Update Category' );
            "add_new_item" => "Добавить раздел", // Текст для добавления нового элемента таксономии. По умолчанию __( 'Add New Tag' ) или __( 'Add New Category' );
            "new_item_name" => "New Добавить раздел name", // Текст для создания нового элемента таксономии. По умолчанию __( 'New Tag Name' ) или __( 'New Category Name' );
            "parent_item" => "Родительский раздел", // Текст для родительского элемента таксономии. Этот аргумент используется для древовидных таксономий. По умолчанию null или __( 'Parent Category' );
            "parent_item_colon" => "Добавить раздел:", // Текст для родительского элемента таксономии, тоже что и parent_item но с двоеточием в конце. По умолчанию нет или __( 'Parent Category:' );
            "search_items" => "Поиск производителя", // Текст для поиска элемента таксономии. По умолчанию __( 'Search Tags' ) или __( 'Search Categories' );
            "popular_items" => "Popular Производители", // Текст описывающий, что элементы нужно разделять запятыми (для блога в админке). Не работает для древовидного типа. По умолчанию __( 'Separate tags with commas' ) или null;
            "separate_items_with_commas" => "Separate Производители with commas", // Текст для "удаления или добавления элемента", который используется в блоке админке, при отключенном javascript. Не действует для древовидных таксономий. По умолчанию __( 'Add or remove tags' ) или null;
            "add_or_remove_items" =>"Add or remove Производители", // Текст для добавления или удаления терминов. Не используется для древовидных типов. По умолчанию: "Добавить или удалить метки". или null.
            "choose_from_most_used" => "Choose from the most used Производители",  // Текст "Выбрать из часто используемых". Не используется для древовидных типов.
            "not_found" =>  "No Производители found",  // Текст "не найдено", который отображается, если при клике на часто используемые ни один термин не был найден.
            "no_terms" =>  "No Производители",  // Используется в таблицах записей и медиафайлов. По умолчанию 'No tags'/'No categories'.
            "items_list_navigation" => "Производители list navigation",  // Текст для таблицы пагинации, для скрытого заголовка.
            "items_list" => "Производители list", // Текст для скрытого заголовка таблицы.
    ),
    
            "label" => "Раздел",
            "public" => true, // каждый может использовать таксономию, либо только администраторы, по умолчанию - true
            "publicly_queryable" => true,
    
            "show_ui" => true, // добавить интерфейс создания и редактирования
            "show_in_menu" => true,
            "show_in_nav_menus" => true, // добавить на страницу создания меню
            "query_var" => true, // разрешено ли использование query_var, также можно указать строку, которая будет использоваться в качестве него, по умолчанию - имя таксономии
    
                "rewrite" => array ( // настройки URL пермалинков
                    'slug' => 'izgotoviteli', // ярлык
               'with_front' => true, // разрешить вложенность
    ),
            "show_admin_column" => true, // авто-создание колонки таксы в таблице ассоциированного типа записи. (с версии 3.5)
            "show_in_rest" => false,
            "rest_base" => "izgotoviteli",
            "rest_controller_class" => "WP_REST_Terms_Controller",
            "show_in_quick_edit" => false,
             "hierarchical" => true,
    )
    
    );
    }
    
    
    add_action( 'init', 'tax_izgotoviteli' );
  • Как вывести произвольные типы записей с категориями в шаблоне?

    @Mishaermolaev Автор вопроса
    /**
     * Post Type: Производители.
     */
    
    add_action( 'init', 'type_proizvoditeli' );
    
    function type_proizvoditeli() {
    
        $labels = [
            "name" => __( "Производители", "custom-post-type-ui" ), // основное название для типа записи, обычно во множественном числе.
            "singular_name" => __( "Производители", "custom-post-type-ui" ), // название для одной записи этого типа.
            "menu_name" => __( "Производители", "custom-post-type-ui" ), // название меню. По умолчанию равен name.
            "all_items" => __( "Все производители", "custom-post-type-ui" ), // архивы записей. По умолчанию равен all_items
            "add_new" => __( "Добавить нового производителя", "custom-post-type-ui" ), // текст для добавления новой записи, как "добавить новый" у постов в админ-панели.
            "add_new_item" => __( "Добавить производителя", "custom-post-type-ui" ), // текст для добавления нового поста. Аналогична тексту "Добавить новый пост" у стандартных записей
            "edit_item" => __( "Редактировать производителя", "custom-post-type-ui" ), // текст для редактирования типа записи. По умолчанию: редактировать пост/редактировать страницу.
            "new_item" => __( "Новый Производитель", "custom-post-type-ui" ), // текст новой записи. По умолчанию: "Новый пост"
            "view_item" => __( "Смотреть эту страницу на сайте", "custom-post-type-ui" ), // текст для просмотра записи этого типа. По умолчанию: "Посмотреть пост"/"Посмотреть страницу".
            "view_items" => __( "Смотреть производителей", "custom-post-type-ui" ), // название в тулбаре, для страницы архива типа записей. По умолчанию: «View Posts» / «View Pages». С WP 4.7.
            "search_items" => __( "Поиск производителей", "custom-post-type-ui" ), // текст для поиска по этим типам записи. По умолчанию "Найти пост"/"найти страницу".
            "not_found" => __( "Производители не найдены", "custom-post-type-ui" ), // текст, если в результате поиска ничего не было найдено.
            "not_found_in_trash" => __( "Производителей нет", "custom-post-type-ui" ), // текст, если не было найдено в корзине. По умолчанию "Постов не было найдено в корзине"/"Страниц  не было найдено в корзине".
           // "parent" => __( "Parent Производитель", "custom-post-type-ui" ),
            "featured_image" => __( "Логотип", "custom-post-type-ui" ),
            "set_featured_image" => __( "Изображения", "custom-post-type-ui" ),
            "remove_featured_image" => __( "Удалить логотип", "custom-post-type-ui" ),
            "use_featured_image" => __( "Использовать изображение", "custom-post-type-ui" ),
            "archives" => __( "izgotoviteli", "custom-post-type-ui" ), // Архивы записей. По умолчанию равен all_items
            "insert_into_item" => __( "Вставить в содержимое", "custom-post-type-ui" ), // Вставить в запись
            "uploaded_to_this_item" => __( "Загрузить производителя", "custom-post-type-ui" ),
            "filter_items_list" => __( "Фильтр производителей", "custom-post-type-ui" ), // Фильтровать список записей
            "items_list_navigation" => __( "Производители list navigation", "custom-post-type-ui" ), // Навигация по записям
            "items_list" => __( "Производители list", "custom-post-type-ui" ), // Список записей
           // "attributes" => __( "Производители attributes", "custom-post-type-ui" ),
            "name_admin_bar" => __( "Производителя", "custom-post-type-ui" ), // Название в админ баре (тулбаре). По умолчанию равен singular_name.
            "item_published" => __( "Производитель опубликован", "custom-post-type-ui" ), // Текст заметки в редакторе записи при публикации записи. С WP 5.0.
          //  "item_published_privately" => __( "Производитель published privately.", "custom-post-type-ui" ), // Текст заметки в редакторе записи при публикации private записи. С WP 5.0.
            "item_reverted_to_draft" => __( "Производитель reverted to draft.", "custom-post-type-ui" ), // Текст заметки в редакторе записи при возврате записи в draft. С WP 5.0.
            "item_scheduled" => __( "Производитель scheduled", "custom-post-type-ui" ),
            "item_updated" => __( "Производитель обновлен", "custom-post-type-ui" ), // Текст заметки в редакторе записи при обновлении записи. С WP 5.0.
            "parent_item_colon" => __( "Parent Производитель", "custom-post-type-ui" ), // Текст для родительского элемента таксономии, тоже что и parent_item но с двоеточием в конце. По умолчанию нет или __( 'Parent Category:' )
        ];
    
        $args = [
            "label" => __( "Производители", "custom-post-type-ui" ), // Имя типа записи помеченное для перевода на другой язык
            "labels" => $labels, // Массив содержащий в себе названия ярлыков для типа записи.
            "description" => "", // Короткое описание этого типа записи для REST API.
            "public" => true, // пределяет является ли тип записи публичным или нет.
            "menu_position" => 4, // позиция, расположение меню
            "menu_icon" => 'dashicons-hammer', // иконка для меню
            "publicly_queryable" => true, // определяет будут ли работать запросы этого типа записей в шаблоне. не будут доступны записи не будут доступны на сайте через url
            "show_ui" => true, // определяет показывать пользовательский интерфейс (UI) для этого типа записей.
            "show_in_rest" => false, // Нужно ли включать тип записи в REST API. true - добавит тип записи в маршрут wp/v2
            "rest_base" => "", // Ярлык в REST API. По умолчанию, название типа записи.
            "rest_controller_class" => "WP_REST_Posts_Controller", // Название класса контроллера в REST API.
            "show_in_menu" => true, // показывать тип записи в административном меню
            "show_in_nav_menus" => false, // возможность выбирать этот тип записи в меню навигации
            "delete_with_user" => false, // Удалять записи при удалении юзера или нет
            "exclude_from_search" => false, // true - этот тип записей не будет учитываться при поиске по сайту
            "capability_type" => "post", // используется для списка прав котрые будут записаны в параметр capabilities.
            "map_meta_cap" => true, // преобразует неоднозначные права
            "hierarchical" => true, // будут ли записи древовидными (true) как постоянные страницы или будут связаны таксономией (false).
            "rewrite" => [ "slug" => "izgotoviteli", "with_front" => true ], // добавляет элемент slug в адрес
            "query_var" => true, // устанавливает  название параметра запроса для создаваемого типа записи
            "has_archive" => 'izgotoviteli', // включает поддержку страниц архивов для этого типа записей
            "taxonomies" => [ "izgotoviteli" ], // Массив зарегистрированных таксономий, которые будут связаны с этим типом записей, например: category или post_tag.
           // "supports" => ['title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields'], типы метаблоков для страницы публикации и редактирования материала
        ];
    
        register_post_type( "proizvoditeli", $args );
    }
  • Как правильно сделать редирект со всего раздела, в новый раздел?

    @Mishaermolaev
    В этом есть магия) После того как задаешь вопрос из вне приходит ответ!
    Дописал вызов переменной сервера в RewriteRule и все заработало.

    https://%{HTTP_HOST}

    RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
    # если строка содержит /dir1/ 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%1/dir2/%2 [R=301,L]
  • Как правильно сделать редирект со всего раздела, в новый раздел?

    @Mishaermolaev
    Виктор, я успешно использовал ваш рецепт для редиректа сначала на тестовом сайте
    без протокола https, но при тестировании на рабочем данный код не справляется и редиректит на 404.

    RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
    # если строка содержит /dir1/ 
    RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L]


    Это правила для редиректа на HTPPS:

    RewriteCond %{HTTP:X-HTTPS} !1
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]


    Не соображу что нужно доработать чтобы на рабочем сайте редирект работал.
    Буду благодарен за помощь.