web-dev-qa-db-fra.com

Défaut WP Galerie - affiche uniquement les galeries d'une certaine catégorie

J'utilise la galerie par défaut de WordPress et leur ajoute des catégories. J'ai maintenant créé un shortcode avec une boucle pour obtenir les galeries sur une page:

if(! function_exists('test_shortcode')){
function lv_gallery_style_one_shortcode($atts, $content = null){
    extract(shortcode_atts( array(
        'title'=>'',
        ), $atts) );

        $port=array('post_type' => 'gallery', 'category_name' => 'beach', 'showposts' => -1 );
        $loop=new WP_Query($port);
        while ( $loop->have_posts() ) : $loop->the_post(); 

        // HERE IS THE LOOP

        return $html;
}
add_shortcode('gallery_test', 'test_shortcode' );

Je sais que la boucle a bien fonctionné, car lorsque je supprime 'category_name' => 'beach', toutes les catégories sont affichées.

--------------- EDIT: -----------------

La galerie que j'utilise a l'icône et l'option suivantes:

 enter image description here 

Je pensais que c'était la galerie standard WP, est-ce que je me trompe?

Lorsque je crée une nouvelle galerie, il y a une section catégorie à droite:

 Category section 

À quoi sert-il si je ne peux pas les utiliser? Je ne comprends pas.

--------------- End EDIT: -------------

Ceci est juste un exemple de code. Dans la version complète, le nom de la catégorie sera un paramètre à entrer dans le shortcode, c'est pourquoi j'aimerais le faire comme ceci.

Des idées sur la façon de faire fonctionner cela?

Toutes les suggestions sont appréciées :).

Merci.

4
Serge Inácio

Ce que je soupçonne, c'est que ces Gallery Categories ne sont pas la taxonomie category. Ils sont probablement une taxonomie enregistrée, enregistrée par le même script qui a ajouté le type de publication de la galerie.

Pour le savoir, cliquez sur le Gallery Categories (dans l'image fournie) et vous serez redirigé vers une URL telle que celle-ci:

http://example.com/wp-admin/edit-tags.php?taxonomy=my-taxonomy&post_type=gallery

Vérifiez l'argument taxonomy. S'il s'agit d'un élément autre que category, votre taxonomie est personnalisée et vous devez ajouter un tax_query à votre WP_Query. Voici comment le faire:

Vos arguments changeraient simplement de ceci:

$port=array('post_type' => 'gallery', 'category_name' => 'beach', 'showposts' => -1 );

Pour ça:

$port = array(
     'post_type' => 'gallery', 
     'showposts' => -1,
     'tax_query' => array (
          array(
              'taxonomy' => 'my-taxonomy',
              'field'    => 'slug',
              'terms'    => 'beach',
          )
     )
);

Note latérale:

Assurez-vous d’utiliser wp_reset_postdata(); juste avant le return $html;. Cela réinitialisera la requête et garantira que votre shortcode n'affectera aucune autre requête de la page.

Terminé.

2
Jack Johansson

D'après votre question, je comprends que vous travaillez avec une installation WordPress standard. Cela signifie qu'il n'y a pas de post-type appelé 'galerie' . Si vous (ou un plugin) en avez créé un, ce qui est parfaitement possible , vous pouvez ignorer ce qui suit, car dans ce cas, je ne peux pas savoir ce qui se passe ni comment vous devez utiliser du code que je ne connais pas.

Du fait que vous souhaitiez créer un shortcode, je comprends que vous souhaitez insérer des images dans un message ou une page standard, mais au lieu de répertorier les images, comme dans le default gallery-shortcode , vous souhaitez inclure une catégorie et WP doit insérer des images avec une certaine étiquette.

Tout d’abord, essayons de comprendre ce qui se passe avec votre code en ce moment. Comme vous pouvez le voir dans les spécifications de wp_query, le default post_type est 'post' . Donc, si vous utilisez un post_type non existant comme galerie, il prendra "post" à la place. Cependant, il y a aucune catégorie par défaut . Donc, si vous spécifiez un category_name qui n'existe pas, la requête ne retournera aucun résultat.

Voyons maintenant comment WP gère les médias. Chaque image est stockée sous forme de message avec le type "pièce jointe". Ce post a un identifiant. Le shortcode par défaut de la galerie est essentiellement une liste d'identifiants. Malheureusement, lorsque vous téléchargez une image, il n’est pas possible de lui attribuer une catégorie. Vous ne pouvez donc pas récupérer les images par catégorie. Cependant, cela peut être facilement résolu :

function wpse295373_add_categories_to_attachments() {
    register_taxonomy_for_object_type ('category', 'attachment');
    }
add_action ('init', 'wpse295373_add_categories_to_attachments');

Vous aurez maintenant la possibilité de donner aux images une catégorie lorsque vous les importez. Vous pouvez donc aussi utiliser la catégorie pour les récupérer dans votre shortcode:

$port=array('post_type' => 'attachment', 'category_name' => 'beach', 'showposts' => -1 );

Cela devrait renvoyer toutes les images de la catégorie plage.

Maintenant, de votre question, il n'est pas clair si c'est ce que vous voulez. Peut-être que vous voulez dire que vous voulez récupérer des galeries d’images. Donc, vous avez une galerie appelée "Espagne" dans la catégorie "plage", contenant cinq images, une autre galerie appelée "France" et ainsi de suite. Si c'est ce que vous voulez, vous devrez créer votre propre post_type.

2
cjbj