it-swarm.com.de

Laden Sie benutzerdefinierte Beiträge mit demselben Tag wie die Seite

Ich benutze dieses Plugin, um Tags für eine Seite hinzuzufügen: http://wordpress.org/extend/plugins/post-tags-and-categories-for-pages/

Und ich habe Unterstützung für Tags für den benutzerdefinierten Post hinzugefügt:

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' );

Ist dies auf jeder Seite mit einem bestimmten Tag möglich, auf der verwandte benutzerdefinierte Posts mit demselben Tag wie die Seite angezeigt werden sollen? Wie kann ich die tagbezogenen benutzerdefinierten Beiträge auf die Seite laden?

Ich habe es mit diesem Code versucht, aber es wird kein entsprechender Beitrag angezeigt:

  <?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

Sie müssen einen Beitragstyp in Ihren WP_Query-Argumenten angeben, wenn Sie einen anderen Beitragstyp abfragen müssen. Akzeptieren Sie den eingebauten Beitragstyp post.

Standardmäßig ist post_type auf post eingestellt. Wenn der Benutzer also keinen bestimmten Beitragstyp manuell einstellt, fragt WP_Query Beiträge vom Beitragstyp post ab.

Außerdem ist caller_get_posts seit sehr langer Zeit veraltet. Wenn Sie das Debugging aktiviert hätten, hätten Sie eine entsprechende Benachrichtigung erhalten. Die richtigen Argumente sind ignore_sticky_posts.

Ich würde den $post global auch nicht verwenden, da er aus Gründen der Zuverlässigkeit unzuverlässig ist, sondern $GLOBALS['wp_the_query']->get_queried_object() verwenden. Sie können dieses Thema in meine Antwort hier nachlesen.

get_the_tags() ist auch schneller als wp_get_post_tags(), da letzteres einen zusätzlichen DB-Aufruf erfordert.

Eine letzte Anmerkung: wp_reset_query() wird mit query_posts verwendet. Die korrekte Funktion für WP_Query lautet wp_reset_postdata().

Im Wesentlichen können Sie Folgendes versuchen

$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

Meine erste Anlaufstelle ist das Anrufen von global $post; - damit können Sie $post->ID verwenden. Wenn Sie es verwenden, besteht der nächste Schritt darin, jedes Teil separat anzuzeigen, z.

print_r($tags);

echo $first_tag;

wenn Sie sehen, was in den einzelnen Teilen angezeigt wird, können Sie leichter erkennen, wo das Problem liegt. Wenn Ihr Code nicht funktioniert, können wir nicht sagen, warum er nicht funktioniert.

2
Gareth Gillman