WordPRess에는 관련 기사 기능을 구현하기 위한 많은 플러그인이 있습니다. 플러그인의 장점은 구성이 간단하다는 것입니다. 하지만 웹 사이트 속도에 약간의 영향을 미칠 수 있으므로 여전히 많은 사람들이 코드를 사용하여 구현하는 것을 선호합니다. 필요한 기능은 있지만 코드 구현에도 단점이 있습니다. 즉, 구성이 복잡하고 코드를 이해하지 못하는 사람들은 완전히 혼란스럽거나 다른 사람의 코드만 복사할 수 있다는 것입니다.
여기에서는 코드를 사용하여 관련 기사를 구현하는 여러 가지 방법을 정리했습니다. 코드의 각 부분의 기능은 물론 원하는 기능을 사용자 정의하는 방법도 모두에게 도움이 되기를 바랍니다. 질문이 있으시면 이 글에 댓글을 남겨주시면 즉시 답변해 드리겠습니다. 시작하기 전에, 다음의 모든 메소드에 의해 출력되는 HTML 코드 형식은 다음과 같은 형식이며 필요에 따라 수정할 수 있다는 점을 설명하겠습니다.
<ul id="xxx">
<li>* <a title="기사 제목 1" rel="bookmark" href="기사 링크 1">기사 제목 1</a></li>
<li>* <a title="기사 제목 2" rel="bookmark" href="기사 링크 2">기사 제목 2</a></li>
...
</ul>
방법 1: 태그 관련
먼저 기사의 모든 태그를 가져온 다음 이 태그 아래에 n개의 기사를 가져오면 이 n개의 기사는 기사와 관련된 기사입니다. 현재 볼 수 있는 모든 WordPress 관련 기사 플러그인은 이 방법을 사용합니다. 구현된 코드는 다음과 같습니다.
<ul id="태그_관련">
<?php
$post_tags = wp_get_post_tags($post->ID);
if ($post_tags) {
foreach($post_tags를 $tag로)
{
// 태그 목록을 가져옵니다.
$tag_list[] .= $tag->term_id;
}
// 태그 목록에서 무작위로 태그를 얻습니다.
$post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
// 이 메소드는 query_posts() 함수를 사용하여 관련 기사를 호출합니다. 매개변수 목록은 다음과 같습니다.
$args = 배열(
'tag__in' => 배열($post_tag),
'category__not_in' => array(NULL), // 카테고리 ID는 포함되지 않습니다.
'post__not_in' => 배열($post->ID),
'showposts' => 6, // 관련 기사 개수 표시
'caller_get_posts' => 1
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts) ?>
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title() ?></a; ></li>
<?php 종료하는 동안: ?>
<li>* 아직 관련 기사가 없습니다</li>
<?php endif; wp_reset_query() } ?>
</ul>
사용 지침: "제외된 카테고리 ID"는 관련 기사가 이 카테고리의 기사를 표시하지 않음을 의미합니다. 동일한 행의 NULL을 기사 카테고리의 ID로 변경하면 여러 ID를 구분할 수 있습니다. 여기에는 관련 기사 6개만 표시되기 때문에 query_posts()의 tag__in 매개변수에 몇 개의 값을 할당하더라도 첫 번째 태그에 기사가 1개, 두 번째 태그가 없는 한 하나의 태그 아래에 6개의 기사만 표시됩니다. 2개의 기사가 있고, 세 번째에는 3개의 기사가 있습니다. . . . . . 따라서 이 기사에 여러 태그가 있는 경우 태그의 ID를 무작위로 가져와서 tag__in 매개변수에 할당하고 태그 아래에 6개의 기사를 가져옵니다.
방법 2: 분류 관련
이 방법은 기사의 카테고리 ID를 얻은 후 이 카테고리의 기사를 얻음으로써 관련 기사를 얻는 목적을 달성합니다.
<ul id="cat_관련">
<?php
$cats = wp_get_post_categories($post->ID);
if ($cats) {
$cat = get_category( $cats[0] );
$first_cat = $cat->cat_ID;
$args = 배열(
'category__in' => 배열($first_cat),
'post__not_in' => 배열($post->ID),
'쇼포스트' => 6,
'caller_get_posts' => 1);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts) ?>
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute();
?>"><?php the_title(); ?></a></li>
<?php 종료하는 동안: ?>
<li>* 아직 관련 기사가 없습니다</li>
<?php endif; wp_reset_query() } ?>
</ul>
방법 3: 태그 관련, SQL 획득
관련 기사를 구하는 원리는 방법 1과 비슷하지만, 기사를 구하는 경우 워드프레스 함수인 query_posts() 대신 SQL 문을 이용해 데이터베이스를 직접 읽어 관련 기사 레코드 6개를 무작위로 구한다.
<ul id="태그_관련">
<?php
$post_tags = wp_get_post_tags($post->ID);
if ($post_tags) {
foreach($post_tags를 $tag로)
{
// 태그 목록을 가져옵니다.
$tag_list[] .= $tag->term_id;
}
// 태그 목록에서 무작위로 태그를 얻습니다.
$post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
$관련 = $wpdb->get_results("
SELECT {$wpdb->prefix}posts.post_title, {$wpdb->prefix}posts.guid
FROM {$wpdb->prefix}게시물, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
WHERE {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id
AND {$wpdb->prefix}term_taxonomy.taxonomy = 'post_tag'
AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}
term_relationships.term_taxonomy_id
AND {$wpdb->prefix}posts.post_status = '게시'
AND {$wpdb->prefix}posts.post_type = '게시물'
AND {$wpdb->prefix}term_taxonomy.term_id = '" . $post_tag . "'
AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
랜드로 주문( )
제한 6");
// 위 코드의 6은 관련 기사 6개만 획득하도록 제한하는 것입니다.
// 숫자 6을 수정하면 원하는 기사 개수를 수정할 수 있습니다.
if ( $관련 ) {
foreach ($관련_포스트와 $관련) {
?>
<li>* <a href="<?php echo $관련_post->guid; ?>" rel="북마크"
title="<?php echo $관련_포스트->포스트_제목; ?>"><?php 에코 $관련_포스트->포스트_제목 ?></a></li>
<?php } } else { ?>
<li>* 아직 관련 기사가 없습니다</li>
<?php } }?>
</ul>
방법 4: 분류 관련, SQL 획득
관련 기사를 구하는 원리는 방법 2와 비슷하지만, 기사를 구하는 경우 워드프레스 함수인 query_posts() 대신 SQL 문을 이용해 데이터베이스를 직접 읽어 관련 기사 레코드 6개를 무작위로 구한다.
<ul id="cat_관련">
<?php
$cats = wp_get_post_categories($post->ID);
if ($cats) {
$cat = get_category( $cats[0] );
$first_cat = $cat->cat_ID;
$관련 = $wpdb->get_results("
wp_posts.post_title, wp_posts.guid 선택
wp_posts, wp_term_relationships, wp_term_taxonomy에서
WHERE wp_posts.ID = wp_term_relationships.object_id
AND {$wpdb->prefix}term_taxonomy.taxonomy = '범주'
AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
AND {$wpdb->prefix}posts.post_status = '게시'
AND {$wpdb->prefix}posts.post_type = '게시물'
AND {$wpdb->prefix}term_taxonomy.term_id = '" . $first_cat . "'
AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
랜드로 주문( )
제한 6");
if ( $관련 ) {
foreach ($관련_포스트와 $관련) {
?>
<li>* <a href="<?php echo $관련_post->guid; ?>" rel="북마크"
title="<?php echo $관련_포스트->포스트_제목; ?>"><?php 에코 $관련_포스트->포스트_제목 ?></a></li>
<?php } } else { ?>
<li>* 아직 관련 기사가 없습니다</li>
<?php } }?>
</ul>
방법 5: 작성자 관련
이 방법은 이 기사의 작성자가 작성한 다른 기사를 가져와 관련 기사로 사용하는 것입니다. 코드는 다음과 같습니다.
<ul id="저자_관련">
<?php
$post_author = get_the_author_meta( 'user_login' );
$args = 배열(
'author_name' => $post_author,
'post__not_in' => 배열($post->ID),
'showposts' => 6, // 관련 기사 개수 표시
'orderby' => 날짜, // 시간순으로 정렬
'caller_get_posts' => 1
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts) ?>
<li>* <a href="<?php the_permalink(); ?>" rel="북마크"
title="<?php the_title_attribute(); ?>"><?php the_title() ?></a></li>
<?php 종료하는 동안: ?>
<li>* 아직 관련 기사가 없습니다</li>
<?php endif; wp_reset_query();
</ul>
시간 효율성 비교
위의 각 방법의 효율성을 평가하고 선택에 대한 참조를 제공하기 위해 이전 PHP 코드를 사용하여 위의 관련 기사 각각의 코드 실행 시간을 측정합니다. 다음은 동일한 기사에서 6개의 관련 기사를 구한 것입니다. 위의 각 방법의 최종 계산 시간은 다음과 같습니다.
방법 1: 0.18067908287048초
방법 2: 0.057158946990967초
방법 3: 0.037126064300537초
방법 4: 0.045628070831299초
방법 5: 0.023991823196411초
원문: http://www.ludou.org/how-to-generate-관련 -posts-in-wordpress.html