Показать Пользовательский Тип Записи по Автору

Вопрос или проблема

Я хотел бы настроить функцию в файле functions.php в теме, чтобы, когда просматривается пользовательский тип записи (custom-post-type), при нажатии на имя автора в посте показывались только CPT этого автора. Однако на главном блоге, если они щелкают по имени автора, показывались бы только блоги этого автора. У меня уже есть имена авторов, отображаемые в метаданных моего пользовательского поста и обычного поста, и у меня есть файл archive-cpt.php, который работает так, как должен.

Псевдокод будет таким:

if (post == custom post type) {

    // показывать только пользовательские типы записей по автору, когда щелкают по имени автора

} else {

    // показывать только блоги по автору, когда щелкают по имени автора

}

Кажется, я хожу кругами уже 2 дня и не продвигаюсь ни на шаг.

Также я был бы рад принять решение, если это означает использование страницы author.php. Я думаю, что будет проще в файле functions.php.

Любая помощь была бы просто потрясающей.

Вам нужно будет отфильтровать ‘author_link’, чтобы условно добавить параметр, который можно использовать для добавления пользовательского типа записи в запрос для постов автора.

add_filter( 'author_link', 'myprefix_author_link', 10, 3 );
function myprefix_author_link( $link, $author_id, $author_nicename ) {
    if ( is_singular( 'myCPT' ) || is_post_type_archive( 'myCPT' ) ) {
        $link = add_query_arg( 'post_type', 'myCPT', $link );
    }
    return $link;
}

По умолчанию (ваша else часть) все равно будут показаны только записи, поэтому нового кода для этого не требуется.

SELECT * FROM wp_posts WHERE autor=[autor id] AND post_type=[custom post type]

Ответ или решение

Для реализации функции, которая будет отображать пользовательские типы записей (CPT) по авторам, необходимо добавить фильтр для ссылки на автора в файл functions.php вашей темы. Мы сделаем это, добавив условие, которое проверяет, является ли отображаемая запись пользовательским типом записей. Если да, то мы добавим параметр, который далее будет использоваться для фильтрации записей по автору.

Вот как это можно сделать:

add_filter( 'author_link', 'myprefix_author_link', 10, 3 );
function myprefix_author_link( $link, $author_id, $author_nicename ) {
    // Проверяем, является ли текущая запись пользовательским типом
    if ( is_singular( 'myCPT' ) || is_post_type_archive( 'myCPT' ) ) {
        // Добавляем параметр для фильтрации по пользовательскому типу записи
        $link = add_query_arg( 'post_type', 'myCPT', $link );
    }
    return $link;
}

Пояснение к коду:

  1. Фильтр author_link: Мы используем фильтр author_link, чтобы изменить стандартную ссылку на автора. В функции myprefix_author_link, мы проверяем, относится ли текущая запись к нашему пользовательскому типу записей (myCPT).

  2. Проверка условия: Если текущая запись — это пользовательский тип (myCPT), мы добавляем к ссылке параметр post_type, что позволяет нам передать этот параметр дальше на странице автора.

Доработка страницы авторов:

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

Пример кода, который вы можете вставить в author.php:

if ( isset( $_GET['post_type'] ) && $_GET['post_type'] === 'myCPT' ) {
    // Измените параметры запроса для получения только пользовательских типов записей
    $args = array(
        'post_type' => 'myCPT',
        'author' => get_the_author_meta('ID')
    );
    $custom_query = new WP_Query( $args );

    if ( $custom_query->have_posts() ) :
        while ( $custom_query->have_posts() ) : $custom_query->the_post();
            // Здесь выводите ваши записи CPT
        endwhile;
        wp_reset_postdata();
    else :
        echo 'Записи не найдены.';
    endif;
} else {
    // Отображение обычных постов
    if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            // Здесь выводите ваши обычные записи
        endwhile;
    else :
        echo 'Записи не найдены.';
    endif;
}

Заключение:

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

Оцените материал
Добавить комментарий

Капча загружается...