web-dev-qa-db-ja.com

ページと同じタグでカスタム投稿を読み込む

私はこのプラグインを使ってページのタグを追加しています: http://wordpress.org/extend/plugins/post-tags-and-categories-for-pages/

そして私はカスタム投稿のタグサポートを追加しました:

function codex_custom_init() {
    $args = array(
      'public' => true,
      'has_archive' => true,
      'label'  => 'Doing',
      'taxonomies' => array('post_tag'),
      'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt')
    );
    register_post_type( 'doing', $args );
}
add_action( 'init', 'codex_custom_init' );

特定のタグを持つすべてのページで、そのページと同じタグを持つ関連カスタム投稿を表示したいのですが、これは可能ですか?タグ関連のカスタム投稿をページにロードするにはどうすればよいですか。

このコードを試してみましたが、関連する記事を表示していません。

  <?php
      $tags = wp_get_post_tags($post->ID);
      if ($tags) {
          echo 'Related Posts';
          $first_tag = $tags[0]->term_id;
          $args=array(
              'tag__in' => array($first_tag),
              'post__not_in' => array($post->ID),
              'posts_per_page'=>5,
              'caller_get_posts'=>1
          );
          $my_query = new WP_Query($args);
          if( $my_query->have_posts() ) {
              while ($my_query->have_posts()) : $my_query->the_post(); ?>
              <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>

               <?php
               endwhile;
          }
          wp_reset_query();
      }
  ?>
4
wpuser

他の投稿タイプを照会する必要がある場合は、投稿タイプpostでビルドを受け入れるときに、WP_Query引数で投稿タイプを指定する必要があります。

デフォルトでは、post_typepostに設定されているため、ユーザーが手動で特定の投稿タイプを設定しない場合、WP_Queryは投稿タイプpostから投稿を照会します

さらに、caller_get_postsは非常に長い間非推奨になっています。デバッグをオンにした場合は、これに関する非推奨の通知を受けたはずです。使用する正しい引数はignore_sticky_postsです。

信頼性の面で信頼性が低いので、$postグローバルも使用しないでください。$GLOBALS['wp_the_query']->get_queried_object()を使用してください。あなたは 私の答えはここ でこの主題について読むことができます

後者は余分なdb呼び出しを必要とするので、 get_the_tags()wp_get_post_tags()より速いです。

最後の注意点として、wp_reset_query()query_postsで使用されます。WP_Queryで使用する正しい関数はwp_reset_postdata()です。

本質的には、あなたは以下を試すことができます

$post_id = $GLOBALS['wp_the_query']->get_queried_object_id();
$tags = get_the_tags( $post_id );
if (    $tags
     && !is_wp_error( $tags ) 
) {
    $args = [
        'post__not_in' => [$post_id],
        'post_type'    => 'doing',
        'tag__in'      => [$tags[0]->term_id],
        // Rest of your args
    ];
    $my_query = new WP_Query( $args );

    // Your loop

    wp_reset_postdata();
}
5
Pieter Goosen

私が最初に呼び出すのはglobal $post;を呼び出すことです - $post->IDを使うように設定します。

print_r($tags);

echo $first_tag;

各部分に何が表示されているかを確認してください。これは問題がどこにあるのかを診断するのに役立ちます。

2
Gareth Gillman