it-swarm.com.de

'category__and' für benutzerdefinierte Taxonomie?

Ich habe einen benutzerdefinierten Beitragstyp 'Beitragstyp-x' und drei benutzerdefinierte Taxonomien, die mit 'Taxonomie-1', 'Taxonomie-2' und 'Taxonomie-3' verknüpft sind.

Ich möchte alle Posts mit den benutzerdefinierten Taxonomien "Taxonomie 1" und "Taxonomie 2" abrufen.

Welches Argumentarray werde ich in der Funktion query_posts übergeben?

$args = array ( ..?.. )
2
Omar Tariq

Ich denke, diese Frage kann zu Missverständnissen führen. Du sagst:

Ich möchte alle Posts mit den benutzerdefinierten Taxonomien "Taxonomie 1" und "Taxonomie 2" abrufen.

aber

möchten Sie einen Beitrag verfassen, bei dem sowohl Taxonomie-1 als auch Taxonomie-2 und Taxonomie-3 irrilevant sind?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

oder

Möchten Sie einen Beitrag verfassen, der sowohl Taxonomie-1 als auch Taxonomie-2 aufweist, aber nicht Taxonomie-3?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-3',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-3', array('fields' => 'ids', 'hide_empty' => false) ),
      'operator' => 'NOT IN'
    )
  )
);

oder

Möchten Sie einen Beitrag verfassen, dessen Taxonomie-1 oder Taxonomie-2 und Taxonomie-3 irrilevant ist?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'OR',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

Beachten Sie, dass diese Art von Abfragen eine schlechte Leistung erbringt, da get_terms eine Datenbankabfrage ausführt. Wenn Sie also den obigen Code verwenden, erhalten Sie mehrere Abfragen, die die Seitenanzeige verlangsamen.

Wenn Sie in der Datei, die diesen Code enthält, auf einige Variablen zugreifen können, die ein Array von IDs (oder Slugs) der Taxonomiebegriffe enthalten, können Sie diese verwenden und die Leistung verbessern.

Alternativ können Sie eine benutzerdefinierte Datenbankabfrage mit $wpdb->get_results und einer entsprechenden SQL-Abfrage erstellen.

2
gmazzap