Segitseg get_objects_in_term() modositasahoz

Haho!











Adott a kovetkezo fuggveny (wp-includes/taxonomy.php) :














<?php

function get_objects_in_term( $term_ids, $taxonomies, $args = array() ) {

global $wpdb;

if ( ! is_array( $term_ids ) )

$term_ids = array( $term_ids );

if ( ! is_array( $taxonomies ) )

$taxonomies = array( $taxonomies );

foreach ( (array) $taxonomies as $taxonomy ) {

if ( ! taxonomy_exists( $taxonomy ) )

return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) );

}

$defaults = array( 'order' => 'ASC' );

$args = wp_parse_args( $args, $defaults );

extract( $args, EXTR_SKIP );

$order = ( 'desc' == strtolower( $order ) ) ? 'DESC' : 'ASC';

$term_ids = array_map('intval', $term_ids );

$taxonomies = "'" . implode( "', '", $taxonomies ) . "'";

$term_ids = "'" . implode( "', '", $term_ids ) . "'";

$object_ids = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tt.term_id IN ($term_ids) ORDER BY tr.object_id $order");

if ( ! $object_ids )

return array();

return $object_ids;

}







Ezt szertnem ugy hasznalni/modositani (nyilvan nem az eredeti fuggvenyt), hogy csak azokat az objektumokat adja vissza, amik tartalmazzak az osszes tag-et nem csak az egyiket vagy a masikat.



Konkretan az ngg-gallery kepeit akarom igy listazni(szurni!) tag-ek alapjan.



Valahogy igy nezne ki a dolog:





<?php

$x=get_objects_in_term_intersection(array("141","144"), "ngg_tag");





Ha egy kep csak a 141-hez tartozik akkor nem kell, ha csak a 144-hez akkor sem. Csak akkor, ha mindkettohoz.


<?php


function get_objects_in_term( $term_ids, $taxonomies, $args = array() ) {


global $wpdb;


if ( ! is_array( $term_ids ) )


$term_ids = array( $term_ids );


if ( ! is_array( $taxonomies ) )


$taxonomies = array( $taxonomies );


foreach ( (array) $taxonomies as $taxonomy ) {


if ( ! taxonomy_exists( $taxonomy ) )


return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) );


}


$defaults = array( 'order' => 'ASC' );


$args = wp_parse_args( $args, $defaults );


extract( $args, EXTR_SKIP );


$order = ( 'desc' == strtolower( $order ) ) ? 'DESC' : 'ASC';


$term_ids = array_map('intval', $term_ids );


$taxonomies = "'" . implode( "', '", $taxonomies ) . "'";


$term_ids = "'" . implode( "', '", $term_ids ) . "'";


$object_ids = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tt.term_id IN ($term_ids) ORDER BY tr.object_id $order");


if ( ! $object_ids )


return array();


return $object_ids;


}











Ezt szertnem ugy hasznalni/modositani (nyilvan nem az eredeti fuggvenyt), hogy csak azokat az objektumokat adja vissza, amik tartalmazzak az osszes tag-et nem csak az egyiket vagy a masikat.





Konkretan az ngg-gallery kepeit akarom igy listazni(szurni!) tag-ek alapjan.





Valahogy igy nezne ki a dolog:







<?php

$x=get_objects_in_term_intersection(array("141","144"), "ngg_tag");





Ha egy kep csak a 141-hez tartozik akkor nem kell, ha csak a 144-hez akkor sem. Csak akkor, ha mindkettohoz.


<?php


$x=get_objects_in_term_intersection(array("141","144"), "ngg_tag");








Ha egy kep csak a 141-hez tartozik akkor nem kell, ha csak a 144-hez akkor sem. Csak akkor, ha mindkettohoz.

http://core.trac.wor…taxonomy.php#L0





elvileg az sql az jonak nez ki a coreban is … nezd meg a wpdb doksiban hogy a get_col az mit is csinal pontosan … szerintem ott van a kutya elasva

Sajnalom, de nem igazan ertem, hogy mre gondolsz. Ez egy core fuggveny, nana hogy jo az sql. Ha tudnam milyen sql modsitasok kellenek, akkor valoszinuleg nem inditok rola egy uj temat.











Ez a query visszadja az osszes kepet(object) ha legalabb egy cimkehez kapcsolodik. Nekem meg olyan kell ami csak akkor ad vissza valamit ha egyezik az osszessel.

ha jol ertem hogy mit akarsz akkor az IN-t kell felbontani es AND -vel elvalsztani…

Ne haragudj de ezzel en meg mindig nem kerultem kozelebb a dologhoz. Szerintem erre vagy tudod a valaszt vagy nem. A talalgatasnak nem sok ertelme van.

Oke akkor bonsd fel az IN ($taxonomies)-t… es AND -vel valaszd el a dolgokat…











ha mar ngg_tag mit akarsz ezzel az egesszel elerni ? mert lehet a nextgen alapbol tudja neked …

Ertekelem, hogy segiteni probalsz de nem igazan ertem miert irod le ugyanazokat a dolgokat tobbszor is. En front-end fejleszto vagyok es nem ertek az ilyen osszetett SQL lekerdezesekhez (mint ahogy azt mar egyszer elmondtam). Azt hogy mit akarok elerni szinten leirtam. Nem hiszem, hogy ennel vilagosabban ki tudom fejezni magam de azert megprobalom.











Tegyuk fel hogy van ket tag, mondjuk fekete es piros:











kep1 -> fekete, piros





kep2 -> fekete





kep3 -> piros











A fuggveny mostani valtozata visszaadna mind a harom kepet, ha ennek a ket tag-nek az id-ja lenne megadva parameternek. Nekem olyan kell ami csak kep1-et adja vissza mert az mindket cimkevel azonosithato. Ennyi. Ezert mondtam az elozo bejegyzesben is, hogy ez egy olyan kerdes amire vagy tudod a valaszt mert ertessz hozza vagy nem. Az ngg pedig tuti, hogy nem tudja ezt alapbol mert ezt a fuggvenyt hasznalja.