Căutare termen taxonomie personalizată după nume

16 feb. 2017, 22:38:19
Vizualizări: 33.1K
Voturi: 5

Am o taxonomie personalizată numită albums.

Am nevoie să pot căuta în text titlul termenului taxonomiei, evident aceasta nu este căutarea implicită WP. Mă întreb care ar fi cea mai bună abordare?

Să zicem că există un album numit 'Hituri Fotbal',

Încep să tastez "fot" și caut asta, tot ce trebuie să apară este titlul albumului și permalink-ul.

Mulțumesc!

0
Toate răspunsurile la întrebare 2
0
13
// Obținem o listă de taxonomii în căsuța de căutare
function get_tax_by_search($search_text){

$args = array(
    'taxonomy'      => array( 'my_tax' ), // numele taxonomiei
    'orderby'       => 'id', 
    'order'         => 'ASC',
    'hide_empty'    => true,
    'fields'        => 'all',
    'name__like'    => $search_text
); 

$terms = get_terms( $args );

 $count = count($terms);
 if($count > 0){
     echo "<ul>";
     foreach ($terms as $term) {
       echo "<li><a href='".get_term_link( $term )."'>".$term->name."</a></li>";

     }
     echo "</ul>";
 }

}

// exemplu
get_tax_by_search('Foo');
16 feb. 2017 23:23:50
7

Deci poți cu siguranță să cauți postări după titlul taxonomiei - personalizat sau nu. Răspunsul se va afla în partea "tax_query" din WP_Query. Iată un exemplu din Codex, adaptat la nevoile tale:

<ul>
<?php

global $post;
$album_title = $_GET['album-title'];
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'tax_query' => array( // NOTĂ: array de array-uri!
        array(
            'taxonomy' => 'albums',
            'field'    => 'name',
            'terms'    => $album_title
        )
    )
);

$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
<?php endforeach; 
wp_reset_postdata();?>

</ul>

ACTUALIZARE

Nu am testat acest lucru, dar teoretic, cred că ar putea funcționa. Pentru a potrivi orice care conține "foot":

<ul>
<?php

global $post;
$album_title = $_GET['album-title']; // să zicem că utilizatorul a introdus 'foot'
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'tax_query' => array( // NOTĂ: array de array-uri!
        array(
            'taxonomy' => 'albums',
            'field'    => 'name',
            'terms'    => $album_title,
            'operator'    => 'LIKE'
        )
    )
);

$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
<?php endforeach; 
wp_reset_postdata();?>

</ul>

Sper că acest lucru te ajută!

16 feb. 2017 22:57:00
Comentarii

Mulțumesc! Dar am nevoie de o căutare bazată pe utilizator. Astfel, când utilizatorul introduce cuvântul "foot", ar trebui să afișeze albumul relevant Football Hits.

DIM3NSION DIM3NSION
16 feb. 2017 23:23:17

Sigur - doar înlocuiește titlul hard-codat cu o variabilă... Cum obții acea valoare de căutare de la utilizator depinde de tine... Am actualizat răspunsul meu cu o variantă, ca exemplu...

nibnut nibnut
16 feb. 2017 23:25:23

Mulțumesc MacPrawn, apreciez ajutorul. Dar sigur că exemplul de mai sus nu va încărca termenii Football Hits dacă valoarea căutată este 'foot'. Poate greșesc eu.

DIM3NSION DIM3NSION
17 feb. 2017 00:04:13

Scuze - am ratat partea în care doreai potriviri parțiale... Am actualizat răspunsul meu.

nibnut nibnut
17 feb. 2017 00:51:25

Am testat varianta de mai sus, dar eu caut să afișez doar Titlul Albumului relevant, nu postările din acel album. Deci nu postări categorizate în Football Hits, ci doar link-ul permanent al albumului.

DIM3NSION DIM3NSION
17 feb. 2017 00:57:26

Ah - am înțeles. Atunci cred că răspunsul lui @TrubinE va fi mai potrivit în acest caz.

nibnut nibnut
17 feb. 2017 12:36:17

Mulțumesc pentru ajutor, MacPrawn

DIM3NSION DIM3NSION
17 feb. 2017 21:02:24
Arată celelalte 2 comentarii