web-dev-qa-db-fra.com

Vérifiez si post/page a galerie?

J'aimerais exécuter du code uniquement si une galerie (insérée avec le shortcode [gallery]) a été insérée dans un article/une page. J'ai fait ce qui suit:

gallery_shortcode($post->ID) ?
$gallery = 1 : $gallery = 0;

Cependant, cela définit toujours $gallery = 0 qu'il y ait une galerie ou non. Est-ce que je ne l'utilise pas correctement?

6
csm232s

essayez:

if (strpos($post->post_content,'[gallery') === false){
  $gallery = 0;
}else{
  $gallery = 1;
}
15
Bainternet

Mon itération sur la solution suggérée ici est la fonction suivante dans le functions.php de mon thème:

function has_gallery($post_id = false) {
    if (!$post_id) {
        global $post;
    } else {
        $post = get_post($post_id);
    }
    return ( strpos($post->post_content,'[gallery') !== false); 
}

Ce que je peux ensuite appeler dans un fichier modèle (peu importe la boucle):

$has_gallery = has_gallery($post_id) ? true : false;

ou plus direct:

has_gallery($post_id); //will evaluate to true/false

$post_id est facultatif, les opérations suivantes uniquement fonctionnent dans la boucle:

has_gallery();
3
Pim Schaaf

Et si vous utilisiez simplement la fonction get_post_gallery(). C'est exactement ce qui se passe, la plupart des thèmes vérifient si un article a une galerie pour imprimer les classes CSS de corps correctes:

if ( get_post_gallery() ) {
    // run your code in here
}

P.S. Je n'aime vraiment pas les solutions qui recherchent quoi que ce soit dans tout le contenu, même si les fonctions de chaîne de caractères sont généralement assez rapides en PHP, cela reste une lourde charge de performances.

2
2ndkauboy