ホームページ >CMS チュートリアル >&#&プレス >WordPress は関連記事機能をどのように実装していますか?いくつかの共有方法

WordPress は関連記事機能をどのように実装していますか?いくつかの共有方法

青灯夜游
青灯夜游転載
2023-03-01 20:17:341344ブラウズ

WordPress は関連記事機能をどのように実装していますか?次の記事では、WordPress コードで関連記事を実装するいくつかの方法を紹介します。

WordPress は関連記事機能をどのように実装していますか?いくつかの共有方法

WordPress プラグインの多くは、関連記事の機能を実現できます。プラグインの利点は設定が簡単なことですが、影響が小さい場合があります。ウェブサイトの速度が速いので、依然として多くの人が好む 私はコードを使用して必要な機能を実装するのが好きですが、繰り返しになりますが、コードの実装には欠点もあります。つまり、構成が複雑で、コードを理解していない人は完全に理解できません。混乱したり、他の人のコードをコピーすることしかできないため、プラグインを使用することをお勧めします。

ここでは、コードを使用して関連記事を実装するいくつかの方法をまとめました。コードの各部分の機能の詳細と、必要な機能をカスタマイズする方法について説明します。みんな、助けて。始める前に、以下のすべてのメソッドによって出力される HTML コード形式は次の形式であることを説明します。必要に応じて変更できます。 1: タグ関連

まず、記事のすべてのタグを取得し、次にそのタグの下にある n 個の記事を取得すると、これらの n 個の記事がその記事に関連する記事になります。現在確認できるすべての WordPress 関連記事プラグインはこの方法を使用しています。実装されたコードは次のとおりです:

<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>
使用方法: 「カテゴリ ID が含まれていません」は、このカテゴリの記事が表示されない関連記事を指します。ピアの NULL を記事の ID に変更するだけです。カテゴリ 詳細 IDは半角カンマで区切られます。ここでは関連記事が6件しか表示されないため、query_posts()のパラメータtag__inにいくつの値を代入しても、最初のタグに1記事、2番目のタグがない限り、1つのタグの下に6件の記事しか表示されません。には 2 つの記事があり、3 番目には 3 つの記事があります。 。 。 。 。 。したがって、この記事に複数のタグがある場合、タグの ID をランダムに取得し、それを tag__in パラメーターに割り当て、そのタグの下にある 6 つの記事を取得します。

方法 2: 分類関連

この方法では、記事の分類 ID を取得し、このカテゴリの下にある記事を取得することで、関連記事を取得するという目的を達成します。

<ul id="tags_related">
<?php
global $post;
$post_tags = wp_get_post_tags($post->ID);
if ($post_tags) {
  foreach ($post_tags as $tag) {
    // 获取标签列表
    $tag_list[] .= $tag->term_id;
  }
  // 随机获取标签列表中的一个标签
  $post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
  // 该方法使用 query_posts() 函数来调用相关文章,以下是参数列表
  $args = array(
        &#39;tag__in&#39; => array($post_tag),
        &#39;category__not_in&#39; => array(NULL),  // 不包括的分类ID
        &#39;post__not_in&#39; => array($post->ID),
        &#39;showposts&#39; => 6,            // 显示相关文章数量
        &#39;caller_get_posts&#39; => 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
    }
  }
  else {
    echo &#39;<li>* 暂无相关文章</li>&#39;;
  }
  wp_reset_query(); 
}
else {
  echo &#39;<li>* 暂无相关文章</li>&#39;;
}
?>
</ul>

方法 3: タグ関連、SQL 取得

関連記事を取得する原理は方法 1 と似ていますが、記事を取得する際には、 SQL ステートメントを使用してデータベースを直接読み取り、WordPress 関数 query_posts() の代わりに 6 つの関連記事レコードをランダムに取得します。

<ul id="cat_related"><?phpglobal $post;$cats = wp_get_post_categories($post->ID);if ($cats) {
    $args = array(
		  &#39;category__in&#39; => array( $cats[0] ),
		  &#39;post__not_in&#39; => array( $post->ID ),
		  &#39;showposts&#39; => 6,
		  &#39;caller_get_posts&#39; => 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
    }
  } 
  else {
    echo &#39;<li>* 暂无相关文章</li>&#39;;
  }
  wp_reset_query(); }else {
  echo &#39;<li>* 暂无相关文章</li>&#39;;}?></ul>

方法 4: 分類関連、SQL Get

関連記事を取得する原理は方法 2 と似ていますが、記事を取得する際には、WordPress 関数を使用するのではなく、SQL ステートメントを使用してデータベースを直接読み取り、6 つの関連記事レコードをランダムに取得します。 query_posts().

<ul id="tags_related"><?phpglobal $post, $wpdb;$post_tags = wp_get_post_tags($post->ID);if ($post_tags) {
    $tag_list = &#39;&#39;;
    foreach ($post_tags as $tag) {
        // 获取标签列表
        $tag_list .= $tag->term_id.&#39;,&#39;;
    }
    $tag_list = substr($tag_list, 0, strlen($tag_list)-1);

    $related_posts = $wpdb->get_results("
        SELECT DISTINCT ID, post_title
        FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
        WHERE {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
        AND ID = object_id
        AND taxonomy = &#39;post_tag&#39;
        AND post_status = &#39;publish&#39;
        AND post_type = &#39;post&#39;
        AND term_id IN (" . $tag_list . ")
        AND ID != &#39;" . $post->ID . "&#39;
        ORDER BY RAND()
        LIMIT 6");
        // 以上代码中的 6 为限制只获取6篇相关文章
        // 通过修改数字 6,可修改你想要的文章数量

    if ( $related_posts ) {
        foreach ($related_posts as $related_post) {?>
    <li><a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li><?php   } 
    }
    else {
      echo &#39;<li>暂无相关文章</li>&#39;;
    } }else {
  echo &#39;<li>暂无相关文章</li>&#39;;}?></ul>

メソッド 5: 著者関連

このメソッドは、記事の著者の他の記事を取得して、記事として使用します。関連記事、コード 以下のとおりです。

<ul id="cat_related"><?phpglobal $post, $wpdb;$cats = wp_get_post_categories($post->ID);if ($cats) {
  $related = $wpdb->get_results("
  SELECT post_title, ID
  FROM {$wpdb->prefix}posts, {$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 = &#39;category&#39;
  AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
  AND {$wpdb->prefix}posts.post_status = &#39;publish&#39;
  AND {$wpdb->prefix}posts.post_type = &#39;post&#39;
  AND {$wpdb->prefix}term_taxonomy.term_id = &#39;" . $cats[0] . "&#39;
  AND {$wpdb->prefix}posts.ID != &#39;" . $post->ID . "&#39;
  ORDER BY RAND( )
  LIMIT 6");

  if ( $related ) {
	  foreach ($related as $related_post) {?>
	<li>* <a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li><?php
    } 
  }
  else {
    echo &#39;<li>* 暂无相关文章</li>&#39;;
  } }else {
  echo &#39;<li>* 暂无相关文章</li>&#39;;}?></ul>

時間効率の比較

上記の各関連記事のコード実行時間を順番に測定します。上記の各方法の効率を評価するには、選択の参考にしてください。以下は、同じ記事内の関連記事を 6 件取得する場合で、上記の各方法の最終的な計算時間は次のとおりです:

方法 1: 0.18067908287048 秒 方法 2: 0.057158946990967 秒

方法 3: 0.037126064300537 秒

方法 4: 0.045628070831299 秒

方法 5: 0.023991823196411 秒


推奨学習: 「
WordPress チュートリアル

以上がWordPress は関連記事機能をどのように実装していますか?いくつかの共有方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はludou.orgで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。