Как называть посты из этого кода функций? - PullRequest
0 голосов
/ 21 марта 2020

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

function exe_get_related_posts_by_common_terms( $post_id, $number_posts = 0, $taxonomy = 'post_tag', $post_type = 'post' ) {
    global $wpdb;

    $post_id = (int) $post_id;
    $number_posts = (int) $number_posts;

    $limit = $number_posts > 0 ? ' LIMIT ' . $number_posts : '';

    $related_posts_records = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT tr.object_id, count( tr.term_taxonomy_id ) AS common_tax_count
             FROM {$wpdb->term_relationships} AS tr
             INNER JOIN {$wpdb->term_relationships} AS tr2 ON tr.term_taxonomy_id = tr2.term_taxonomy_id
             INNER JOIN {$wpdb->term_taxonomy} as tt ON tt.term_taxonomy_id = tr2.term_taxonomy_id
             INNER JOIN {$wpdb->posts} as p ON p.ID = tr.object_id
             WHERE
                tr2.object_id = %d
                AND tt.taxonomy = %s
                AND p.post_type = %s
             GROUP BY tr.object_id
             HAVING tr.object_id != %d
             ORDER BY common_tax_count DESC" . $limit,
            $post_id, $taxonomy, $post_type, $post_id
        )
    );

    if ( count( $related_posts_records ) === 0 )
        return false;

    $related_posts = array();

    foreach( $related_posts_records as $record )
        $related_posts[] = array(
            'post_id' => (int) $record->object_id,
            'common_tax_count' => $record->common_tax_count
        );

    return $related_posts;
}

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

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Эта функция очень полезна, люди постоянно ищут способы получения похожих сообщений

  • Что эта функция делает:

Код, который вы используется рабочий function, который возвращает массив сообщений, связанных с текущим сообщением, в зависимости от общих терминов.

  • Как работает эта функция:

Вы можете вызвать функцию из файла single.php, и в качестве входных данных вы должны предоставить 4 информации. Текущее сообщение ID, количество связанных сообщений, которое нужно вернуть, post_term для фильтрации соответствующих сообщений (post_tag) и, наконец, post_type.

Пример вызова функции: exe_get_related_posts_by_common_terms(get_the_ID(), 10, 'post_tag', 'post') Приведенный выше пример вернет 10 идентификаторов записей в виде массива на основе текущей записи ID и tag

- Возвращение массива записей и l oop через ID

Теперь нам нужен только пользовательский wp_query, чтобы l oop через array и отформатировать вывод.

Пример wp_query:

$args = array(
   'post_type' => 'post',
   'post__in'      => $related_post
);
// The Query
$related_query = new WP_Query( $args );
  • Результат:

Полный рабочий пример возврата заголовков сообщений в неупорядоченном списке:

<?php
$cpid = get_the_ID();  // get current post id
$related_posts = exe_get_related_posts_by_common_terms($cpid, 10, 'post_tag', 'post');
$posts_array = array_column($related_posts, 'post_id'); // new single dimension array with the ID's

$args = array(
   'post_type' => 'post',
   'post__in'      => $posts_array
);
// The Query
$related_query = new WP_Query( $args );
if ($related_query->have_posts()) : ?>
<ul>
<?php while ($related_query->have_posts()) : $related_query->the_post(); ?>
<li><?php the_title(); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>

Теперь вы можете настроить внешний вид и заливку, как вам нравится

1 голос
/ 21 марта 2020

попробуйте что-то подобное:

$query = new WP_Query(array(
   'post_status' => 'publish',
   'post_type' => 'your-posttype', // or 'any'
   'tag_slug__in' => 'your-tag',
   'order' => 'DESC',
   'posts_per_page' => 10
));

Тогда вы получите последние 10 сообщений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...