Exécuter une requête SQL avec LIKE

Fermé
Lyro-Pac Messages postés 13 Date d'inscription mardi 22 janvier 2013 Statut Membre Dernière intervention 9 juin 2014 - 9 juin 2014 à 06:33
Lyro-Pac Messages postés 13 Date d'inscription mardi 22 janvier 2013 Statut Membre Dernière intervention 9 juin 2014 - 9 juin 2014 à 21:39
Bonjour à tous,

Je suis un super débutant en PHP et Wordpress du coup je n'arrive pas à exécuter une seul requête(d'ailleurs c'est ma toute première sur Wordpress) oO . J'ai recherché sur les moteurs de recherche et j 'ai trouvé sur un site, un shortcode qui permet d'afficher une liste des article associent d'un même tag:

function related_posts_shortcode( $atts ) {
    extract(shortcode_atts(array(
        'limit' => '1000',
        ), $atts));

    global $wpdb, $post, $table_prefix;

    if ($post->ID) {
        $retval = '<ul>';
        // Get tags
        $tags = wp_get_post_tags($post->ID);
        $tagsarray = array();
        foreach ($tags as $tag) {
            $tagsarray[] = $tag->term_id;
        }
        $tagslist = implode(',', $tagsarray);

        // Do the query
        $q = "SELECT p.*, count(tr.object_id) as count
            FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr,
 $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND 
tr.object_id  = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
                AND p.post_status = 'publish'
                AND p.post_date_gmt < NOW()
             GROUP BY tr.object_id
            ORDER BY count ASC, p.post_title ASC
            LIMIT $limit;";

        $related = $wpdb->get_results($q);
        if ( $related ) {
            foreach($related as $r) {
                $retval .= '
    <li position="centre"><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>
';
                
            }
        } else {
            $retval .= '
    <li>No related posts found</li>
';
        }
        $retval .= '</ul>
';
        return $retval;
    }
    return;
}
add_shortcode('related_posts', 'related_posts_shortcode');


Le problème c'est que, je veux recuperer le titre de l' article active et afficher une liste des titres des articles comportent au moins le titre du post active + autre chose à l' aide d'un shortcode non pas une liste des article associent d'un même tag .

Exemple : Je veux afficher les tires(xxx 1, xxx 2, 3 xxx , 4 xxx, ... ,xxx N) quand je suis l'article xxx .

Et pour ça j' ai pu faire cette syntaxe SQl mais elle marche que sur MySql( et je ne sais pas comment la traduire correctement en wp_query ou autres chose)

SELECT 'tt_posts'.'post_title' 
FROM  'tt_posts' 
WHERE 'tt_posts'.'post_title' LIKE '%xxx%' AND 'tt_posts'.'post_status' = 'publish'



et sur Wordpress j' ai pas pu faire grand chose car j 'ai tout simplement modifier la fonction précédente mais j'ai comme même fais une fonction qui ne retourne rien et le site plante complément :(


function asso_shortcode($atts) {

    extract(shortcode_atts(array(
        'limit' => '1000',
        ), $atts));
    global $wpdb, $post, $table_prefix;

    if ($post->ID) {
        $retval = '<ul>';
        
        $ptitre= get_the_title();

        
        $q = "SELECT COUNT(p.ID)
    FROM $wpdb->post AS p 
    where p.post_title like '%$ptitre%'
    AND p.post_status = 'publish' ,
    ORDER BY p.post_title ASC,
    LIMIT $limit;";

        $related = $wpdb->get_results($q);
        if ( $related ) {
            foreach($related as $r) {
                $retval .= '
    <li position="centre"><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>
';
                
            }
        } else {
            $retval .= '
    <li>No related posts found</li>
';
        }
        $retval .= '</ul>
';
        return $retval;
    }
    return;
    }
add_shortcode('asso', 'asso_shortcode');




Si quelqu'un a déjà eu ce soucis ou connais le moyen de le regeler, je lui en serait vraiment très reconnaissant!

Merci en avance

A voir également:

6 réponses

elgazar Messages postés 5841 Date d'inscription mercredi 30 octobre 2013 Statut Membre Dernière intervention 17 mars 2021 1 325
9 juin 2014 à 09:29
j'ai du mal a comprendre ce que tu veux faire, les articles xxx, xxx1, xxx2 sont un seul et même article que tu as découpé en plusieurs a cause de sa longueur ?
0
Lyro-Pac Messages postés 13 Date d'inscription mardi 22 janvier 2013 Statut Membre Dernière intervention 9 juin 2014 2
9 juin 2014 à 15:11
D'abord merci d'avoir répondu et les article sont tous différents, peut-être si je vous donnes un autre exemple vous pourriez mieux comprendre:

Si je publie un article portant comme titre One Piece et que je l'insère un shortcode du genre [episode titre="one piece"] je veux qu'il me donne tout les épisodes de One Piece -> One Piece 1 vostfr, One Piece 2 vf , One Piece 3 vostfr,... et si de suite.
0
elgazar Messages postés 5841 Date d'inscription mercredi 30 octobre 2013 Statut Membre Dernière intervention 17 mars 2021 1 325
9 juin 2014 à 17:12
Ce que tu décris revient a afficher une liste des articles en relation comme n'importe quel plugin related posts peut le faire
0
Lyro-Pac Messages postés 13 Date d'inscription mardi 22 janvier 2013 Statut Membre Dernière intervention 9 juin 2014 2
9 juin 2014 à 19:27
Salut, je sais que je peux utiliser un plugin mais la plus part des plugin utiliser les tags, les catégories et je veux pas ça c'est je veux, c'est de faire ma propre fonction que je peux la modifier. D'ailleurs si c'est possible de la créer :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elgazar Messages postés 5841 Date d'inscription mercredi 30 octobre 2013 Statut Membre Dernière intervention 17 mars 2021 1 325
9 juin 2014 à 19:59
sans doute mais je vois pas comment tu pourrais facilement trier tes articles si tu n'utilises pas les tags
0
Lyro-Pac Messages postés 13 Date d'inscription mardi 22 janvier 2013 Statut Membre Dernière intervention 9 juin 2014 2
9 juin 2014 à 21:39
C'est facile avec une requête Sql, on peut tout faire :) d'ailleurs j'ai la requête mais il me manque de la transformer ou un truc de c genre ;)
0