Frage

Gibt es eine einfache Möglichkeit, nach Beiträgen zu fragen, die mit einer bestimmten Taxonomie mit einem Begriff markiert sind?

Ich kenne diese Technik:

$custom_taxonomy_query = new WP_Query( 
 array(
  'taxonomy_name' => 'term_slug',
 )
);

Aber ich möchte entweder eine Wildcard anstelle von Term_Slug oder vielleicht nur einer leeren Saite übergeben. Dann würde mir alle Beiträge geben, die in dieser Taxonomie, nicht nur in einem bestimmten Begriff, von einem Begriff markiert werden.

Vielen Dank für Ihre Hilfe, Dave

War es hilfreich?

Lösung

Rückblickend habe ich ein Mashup mit den Vorschlägen von Mikeschinkel und T31OS gemacht. Es ist möglich, dies vorhandenen Fragen im laufenden Fliegen zu injizieren, aber es braucht WordPress 3.1:

Plugin, um einen RSS -Feed für Posts mit einer Taxonomie zu erhalten.

Andere Tipps

Ich bin auf eine ähnliche Situation gestoßen, Dave. Dieser Code hat den Trick für meine Zwecke gemacht. Es ist nicht die schlankste Option der Welt, aber es macht den Job gut:

// Get all term ID's in a given taxonomy
$taxonomy = 'taxonomy_name';
$taxonomy_terms = get_terms( $taxonomy, array(
    'hide_empty' => 0,
    'fields' => 'ids'
) );

// Use the new tax_query WP_Query argument (as of 3.1)
$taxonomy_query = new WP_Query( array(
    'tax_query' => array(
        array(
            'taxonomy' => $taxonomy,
            'field' => 'id',
            'terms' => $taxonomy_terms,
        ),
    ),
) );

Hoffentlich hilft dies Ihnen oder jemand anderem, der das Problem erlebt.

Kevin

So etwas könnte funktionieren:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'your_custom_taxonomy',
            'operator' => 'EXISTS'
        ),
    ),
);
$query = new WP_Query( $args );

Sie bitten im Grunde nach einem Post, der einem Begriff in Ihrem_Custom_Taxonomy zugewiesen ist.

Hi @Dave Morris:

Sie haben Recht, WordPress entscheidet, ob Sie keinen Begriff haben, dass sie Ihre Taxonomie nur ignorieren.

Es gibt Drei (3) Hauptansätze du könntest es versuchen:

  1. Verwenden Sie eine vollständige SQL -Abfrage mit $wpdb->get_results(),

  2. Eine Liste erhalten $post->IDs Für alle Beiträge in Ihrer Taxonomie und dann über die Verwendung des 'post__id' Argument, oder

  3. Annotieren Sie die von SQL verwendete SQL von WP_Query Mit einem der Haken, in denen Sie einen SQL hinzufügen können INNER JOIN Referenzierung der Taxonomie -Tabellen.

Ich versuche, vollständige SQL in WordPress zu vermeiden, bis entweder nicht geholfen werden kann oder einfach eine Liste von IDs zurückgibt. Und in diesem Fall würde ich vermeiden, eine Liste von zu ziehen $post-IDs für die Verwendung mit dem 'post__id' Argument, weil es auf Leistungsprobleme und sogar Gedächtnisprobleme stoßen könnte, wenn Sie viele Beiträge hätten. Das lässt uns also mit #3.

Ich habe eine Klasse zum Ausdehnen erstellt WP_Query genannt PostsByTaxonomy das verwendet die 'posts_join' Haken. Sie können es hier sehen:

class PostsByTaxonomy extends WP_Query {
  var $posts_by_taxonomy;
  var $taxonomy;
  function __construct($args=array()) {
    add_filter('posts_join',array(&$this,'posts_join'),10,2);
    $this->posts_by_taxonomy = true;
    $this->taxonomy = $args['taxonomy'];
    unset($args['taxonomy']);
    parent::query($args);
  }
  function posts_join($join,$query) {
    if (isset($query->posts_by_taxonomy)) {
      global $wpdb;
      $join .=<<<SQL
INNER JOIN {$wpdb->term_relationships} ON {$wpdb->term_relationships}.object_id={$wpdb->posts}.ID
INNER JOIN {$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id={$wpdb->term_relationships}.term_taxonomy_id
  AND {$wpdb->term_taxonomy}.taxonomy='{$this->taxonomy}'
SQL;
    }
    return $join;
  }
}

Sie würden diese Klasse wie unten sehen. Das Argument 'taxonomy' ist ein erforderlich aber Sie können jeden passieren (alle?) der anderen Parameter, die WP_Query erwartet auch, wie z. 'posts_per_page':

$query = new PostsByTaxonomy(array(
  'taxonomy' => 'category',
  'posts_per_page' => 25,
));
foreach($query->posts as $post) {
  echo " {$post->post_title}\n";
}

Sie können die kopieren PostsByTaxonomy Klasse zu Ihrem Thema functions.php Datei, oder Sie können sie in einem verwenden .php Datei eines Plugins, die Sie möglicherweise schreiben.

Wenn Sie es schnell testen möchten, habe ich gepostet eine in sich geschlossene Version des Code zu GIST, den Sie herunterladen und in das Stamm Ihres Webservers kopieren können test.php, Ändern Sie für Ihren Anwendungsfall und fordern Sie dann von Ihrem Browser mit einer URL -Like an http://example.com/test.php.

AKTUALISIEREN

Zu Sticky Posts auslassen Versuchen Sie dies aus den in der Abfrage enthaltenen Beiträge:

$query = new PostsByTaxonomy(array(
  'taxonomy' => 'category',
  'posts_per_page' => 25,
  'caller_get_posts' => true,
));

Oder wenn es Ihnen wichtig ist, dass die PostsByTaxonomy Die Klasse enthält nie Haftposts, die Sie in den Konstruktor einfügen könnten:

  function __construct($args=array()) {
    add_filter('posts_join',array(&$this,'posts_join'),10,2);
    $this->posts_by_taxonomy = true;
    $this->taxonomy = $args['taxonomy'];
    $args['caller_get_posts'] = true     // No Sticky Posts
    unset($args['taxonomy']);
    parent::query($args);
  }

Update 2

Nachdem ich das oben genannte veröffentlicht habe, habe ich gelernt, dass 'caller_get_posts' veraltet sein wird und 'ignore_sticky_posts' wird in WordPress 3.1 verwendet.

Sie sollten einfach in der Lage sein, die Taxonomie festzulegen und negieren, um einen Begriff aufzunehmen.

Z.B.

<?php
$your_query = new WP_query;
$your_query->query( array( 'taxonomy' => 'your-taxonomy-name' ) );
?>

Das wäre so gut wie die Abfrage, die ein Taxonomie -Archiv ausführt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top