WordPRess には、関連記事の機能を実装するためのプラグインが多数あります。プラグインの利点は設定が簡単なことですが、Web サイトの速度に与える影響が小さいため、コードを使用して実現することを好む人が依然として多いです。コードの実装には、構成が複雑で、コードを理解していない人は完全に混乱したり、他の人のコードをコピーすることしかできないという欠点もあります。プラグインを使用する方がよいでしょう。
ここでは、コードの各部分の機能を明確に示し、必要な機能をカスタマイズする方法をいくつかまとめました。ご質問がございましたら、この記事にコメントしていただければすぐに返信させていただきます。始める前に、以下のすべてのメソッドによって出力される HTML コード形式は次の形式であり、必要に応じて変更できることを説明します。
<ul id="xxx">
<li>* <a title="記事タイトル 1" rel="ブックマーク" href="記事リンク 1">記事タイトル 1</a></li>
<li>* <a title="記事タイトル 2" rel="bookmark" href="記事リンク 2">記事タイトル 2</a></li>
...
</ul>
方法 1: タグ関連
まず記事のすべてのタグを取得し、次にこれらのタグの下にある n 個の記事を取得すると、これらの n 個の記事がその記事に関連する記事になります。現在確認できるすべての WordPress 関連記事プラグインはこの方法を使用しています。実装されたコードは次のとおりです。
<ul id="tags_関連">
<?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()) : update_post_caches($posts);
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title() ?></a; ></li>
<?php endwhile : ?>
<li>* 関連記事はまだありません</li>
<?php endif();
</ul>
使用方法: 「除外カテゴリ ID」は、このカテゴリの下に関連記事が表示されないことを意味します。複数の ID を区切る場合は、同じ行の NULL を半角カンマで区切ります。ここでは関連記事が6件しか表示されないため、query_posts()のパラメータtag__inにいくつの値を代入しても、最初のタグに1記事、2番目のタグがない限り、1つのタグの下に6件の記事しか表示されません。には 2 つの記事があり、3 番目には 3 つの記事があります。 。 。 。 。 。したがって、この記事に複数のタグがある場合、タグの ID をランダムに取得し、それを tag__in パラメーターに割り当て、タグの下にある 6 つの記事を取得します。
方法 2: 分類関連
このメソッドは、記事のカテゴリIDを取得し、そのカテゴリ配下の記事を取得することで、関連記事を取得するという目的を達成します。
<ul id="猫関連">
<?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()) : update_post_caches($posts);
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute();
?>"><?php the_title(); ?></a></li>
<?php endwhile : ?>
<li>* 関連記事はまだありません</li>
<?php endif();
</ul>
方法3:タグ関連、SQL取得
関連記事を取得する原理は方法1と似ていますが、記事を取得する際にはWordPressの関数query_posts()の代わりにSQL文を使用してデータベースを直接読み込むことでランダムに6件の関連記事レコードを取得します。
<ul id="tags_関連">
<?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) ];
$relative = $wpdb->get_results("
SELECT {$wpdb->prefix}posts.post_title、{$wpdb->prefix}posts.guid
FROM {$wpdb->prefix}posts、{$wpdb->prefix}term_relationships、{$wpdb->prefix}term_taxonomy
WHERE {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id
かつ {$wpdb->prefix}term_taxonomy.taxonomy = 'post_tag'
かつ {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}
term_relationships.term_taxonomy_id
かつ {$wpdb->prefix}posts.post_status = '公開'
かつ {$wpdb->prefix}posts.post_type = 'post'
かつ {$wpdb->prefix}term_taxonomy.term_id = '" . $post_tag . "'
AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
ランドごとに注文( )
制限6インチ);
// 上記コードの 6 は、関連記事の取得を 6 件のみに制限するためです。
// 数字の 6 を変更することで、必要な記事の数を変更できます
if ( $関連 ) {
foreach ($relative として $relative_post) {
?>
<li>* <a href="<?php echo $relative_post->guid; ?>" rel="ブックマーク"
title="<?php echo $関連付け_post->post_title; ?>"><?php echo $関連付け_post->post_title ?></a></li>
<?php } } else { ?>
<li>* 関連記事はまだありません</li>
<?php } }?>
</ul>
方法4:分類関連、SQL取得
関連記事を取得する原理は方法2と似ていますが、記事を取得する際にはWordPressの関数query_posts()の代わりにSQL文を使用してデータベースを直接読み取り、関連記事レコードをランダムに6件取得します。
<ul id="猫関連">
<?php
$cats = wp_get_post_categories($post->ID);
if ($cats) {
$cat = get_category( $cats[0] );
$first_cat = $cat->cat_ID;
$relative = $wpdb->get_results("
SELECT wp_posts.post_title、wp_posts.guid
FROM 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
かつ {$wpdb->prefix}posts.post_status = '公開'
かつ {$wpdb->prefix}posts.post_type = 'post'
かつ {$wpdb->prefix}term_taxonomy.term_id = '" . $first_cat . "'
AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
ランドごとに注文( )
制限6インチ);
if ( $関連 ) {
foreach ($relative として $relative_post) {
?>
<li>* <a href="<?php echo $relative_post->guid; ?>" rel="ブックマーク"
title="<?php echo $関連付け_post->post_title; ?>"><?php echo $関連付け_post->post_title ?></a></li>
<?php } } else { ?>
<li>* 関連記事はまだありません</li>
<?php } }?>
</ul>
方法 5: 著者関連
この記事の著者による他の記事を関連記事として取得する方法です。コードは次のとおりです。
<ul id="著者関連">
<?php
$post_author = get_the_author_meta( 'user_login' );
$args = 配列(
'著者名' => $post_author,
'post__not_in' => 配列($post->ID),
'showposts' => 6, // 関連記事の数を表示
'orderby' => date, // 時間順に並べ替えます
'caller_get_posts' => 1
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : update_post_caches($posts);
<li>* <a href="<?php the_permalink(); ?>" rel="ブックマーク"
title="<?php the_title_attribute(); ?>"><?php the_title() ?></a></li>
<?php endwhile : ?>
<li>* 関連記事はまだありません</li>
<?php endif();
</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-popular-posts-in-wordpress.html