Ich verwende get_bookmarks()
, um Lesezeichenlinks zu erhalten. Ich kann Links bekommen, die in Katze A oder Katze B gepostet werden, aber ich will nur Verbindungen in A und B.
Beispiel was ich brauche:
Ich habe drei Linkkategorien cat#1
, cat#2
, cat#3
.
Ich brauche Links in cat#1 AND cat#2
nicht cat#1 OR cat#2
(Kreuzung).
Ich verwende derzeit:
$links = get_bookmarks(array('category' => $term_ids));
Was nicht funktioniert, weil get_bookmarks()
funktioniert .
$category_query = ''; $join = ''; if ( !empty($category) ) { $incategories = preg_split('/[\s,]+/',$category); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($category_query)) $category_query = ' AND ( tt.term_id = ' . intval($incat) . ' '; else $category_query .= ' OR tt.term_id = ' . intval($incat) . ' '; } } }
Hinweis vom Redakteur: Beispielcode zum besseren Verständnis hinzufügen – Lesezeichen werden standardmäßig mit einer OR
Klausel abgefragt. Da sie über $wpdb->get_result()
abgerufen werden, gibt es keine einfache Lösung beim Filtern neben dem abgefragten Ergebnis.
Jede Hilfe oder Idee eines anderen Ansatzes wäre sehr willkommen.
AKTUALISIEREN
Ich versuche, eine neue function aus der function get_bookmarks () zu machen.
Ich habe den Code, der oben gezeigt wurde, geändert (ODER in AND geändert). Aber jetzt kehrt nichts zurück. Vielleicht muss ich das SQL zu etwas anderem ändern. Also, ich brauche einen Rat zu diesem Thema.
if ( !empty($category) ) { $incategories = preg_split('/[\s,]+/',$category); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($category_query)) $category_query = ' AND ( tt.term_id = ' . intval($incat) . ' '; else{ // sisir $category_query .= ' AND tt.term_id = ' . intval($incat) . ' '; } } } }
Es sollte so einfach sein: link_category
Sie sich einfach die Begriffe aus der link_category
und verwenden get_terms()
stattdessen das Argument get_terms()
, das so funktionieren sollte, wie Sie es brauchen.
get_terms( 'link_category' ,array( 'include' => array( 1, 2, 3 ) ,'orderby' => 'name' ,'order' => 'ASC' ,'hierarchical' => 0 ) );
Forking get_bookmarks()
scheint mühsam, ich würde ein wenig Code (und Cache, wenn es langsam wird). Etwas wie das:
/** * Retrieve links that have all of the terms assigned. * * @param array $term_ids * * @return array of link objects */ function get_bookmarks_in_terms( $term_ids ) { $bookmark_ids = array(); foreach ( $term_ids as $term_id ) { $bookmarks_in_term = get_objects_in_term( $term_id, 'link_category' ); if ( empty( $bookmarks_in_term ) ) return array(); if ( empty( $bookmark_ids ) ) $bookmark_ids = $bookmarks_in_term; else $bookmark_ids = array_intersect( $bookmark_ids, $bookmarks_in_term ); } if ( empty( $bookmark_ids ) ) return array(); return get_bookmarks( array( 'include' => implode( ',', $bookmark_ids ) ) ); }
Verwenden Sie get_objects_in_term
, um alle Objekte mit diesen Begriffen zu erfassen.
$objects = get_objects_in_term($term_ids,'link_category'); $links = get_bookmarks(array('include' => $objects ));