web-dev-qa-db-fra.com

Titres des images de la galerie - obtenir de l'article

Est-il possible de créer un crochet de fonctions, qui remplacera automatiquement les titres des images ajoutées (ou ajoutés lors de la création de la galerie) avec le titre de l'article? Tout comme dans l'exemple: - je crée un article appelé lorem ipsum - je télécharge un fichier appelé pingpong.jpg - sans hook par défaut, wordpress donnera un titre à l'image: pingpong.jpg - résultat attendu du hook: après uploader l'image mon titre d'image sera: lorem ipsum

est-ce même possible via des fonctions?

en plus de cela, je voudrais utiliser l'attribut ajouté automatiquement au shortcode de la galerie qui gérera le changement. Jusqu'à présent, j'ai quelque chose comme ça:

add_filter('shortcode_atts_gallery','overwrite_gallery_atts_wpse_95965',10,3);
function overwrite_gallery_atts_wpse_95965($out, $pairs, $atts){
    $out['parent_titles']='yes';
    return $out;
}
2
Julia Galden

Gallery Image Caption - En tant que titre du message auquel il est attaché

Voici un moyen de le faire avec un attribut personnalisé parent_titles dans le shortcode de la galerie native.

Pour ce faire, définissez suppress_filters sur false pour la requête à la galerie et modifiez les extraits de publications via le filtre the_posts. Nous pouvons ensuite vérifier les entrées d'attributs personnalisés via le filtre shortcode_atts_gallery.

Exemple

En utilisant parent_titles comme chaîne booléenne , nous pourrions l’utiliser comme indiqué ici:

[gallery parent_titles="yes" ids="132,321,213"]

[gallery parent_titles="true" ids="132,321,213"]

[gallery parent_titles="1" ids="132,321,213"]

Voici quelques captures d'écran du test que j'ai créé pour @JuliaGalden

Premièrement, j'ai créé trois messages et y ai attaché une image en couleur correspondante:

posts

Ensuite, j'ai créé une galerie avec:

[gallery ids="132,321,213"]

qui est apparu avec les légendes de l'image comme:

normal

Puis j'ai ajouté l'attribut personnalisé:

[gallery parent_titles="yes" ids="132,321,213"]

et il s'est montré comme:

With parent titles

où les légendes sont maintenant les titres des publications parent.

plugin de démonstration

Voici un plugin de démonstration qui pourrait supporter cette fonctionnalité (PHP 5.4+):

<?php
/** 
 * Plugin Name: Gallery Image Caption As The Parent Post's Title
 * Description: Support for boolean parent_titles attribute in native post galleries
 * Plugin URI:  http://wordpress.stackexchange.com/a/228857/26350
 * Version:     1.0.1
 */

namespace WPSE\Q228851;

class Main 
{
    /**
     * @var bool
     */
    private $active;    

   /**
    * Setup actions and filters
    */
    public function activate()
    {
       add_filter( 'shortcode_atts_gallery', [ $this, 'shortcode_atts_gallery' ], 999, 3 );
       add_action( 'pre_get_posts',          [ $this, 'pre_get_posts' ] );
       add_filter( 'the_posts',              [ $this, 'the_posts' ] );      
    }   

   /**
    * Activate if the parent_titles attribute is set
    */
   public function shortcode_atts_gallery( $out, $pair, $atts )
   {
       if(    isset( $out['parent_titles'] ) 
              && wp_validate_boolean( $out['parent_titles'] )
          || 
              isset( $atts['parent_titles'] ) 
              && wp_validate_boolean( $atts['parent_titles'] )  
       )
           $this->active = true;

        return $out;
    }

   /**
    * Don't suppress filters for the gallery posts query
    */
    public function pre_get_posts( \WP_Query $q )
    {
        if( $this->active )
            $q->set( 'suppress_filters', false );
    }

   /**
    * Override each image title with the title of post it's attached to
    */
    public function the_posts( $posts )
    {
        if( $this->active )
        {
            foreach( $posts as $post )
            {
                if( $post->post_parent )
                    $post->post_excerpt = get_post_field( 'post_title', $post->post_parent ); 
            }
            $this->active = false;
        }
        return $posts;
    }   

} // end class


/**
 * Activate
 */
( new Main )->activate();

Comment installer : Copiez ce code dans le fichier /wp-content/plugins/galleries-with-parent-post-titles/plugin.php et activez le plug-in dans le backend wp-admin de la manière habituelle. Ajoutez ensuite le parent_titles="yes" à votre code court de galerie où vous souhaitez afficher les titres de publication parent.

Activation automatique pour toutes les galeries

Pour faire cela automatiquement pour toutes les galeries, nous pouvons changer la méthode Main::shortcode_atts_gallery() en:

   public function shortcode_atts_gallery( $out, $pair, $atts )
   {
        $this->active = true;
        return $out;
    }

ou utilisez le filtre suivant créé par @JuliaGalden, que vous pouvez tester, par exemple. dans functions.php:

add_filter('shortcode_atts_gallery', 'overwrite_gallery_atts_wpse_95965', 10, 3 );
function overwrite_gallery_atts_wpse_95965( $out, $pairs, $atts )
{
    $out['parent_titles'] = 'yes';
    return $out;
}

Si nous voulons l'utiliser dans le plugin, nous devons le changer pour

add_filter( 'shortcode_atts_gallery', __NAMESPACE__ . '\\overwrite_gallery_atts_wpse_95965', 10, 3 );
function overwrite_gallery_atts_wpse_95965( $out, $pairs, $atts )
{
    $out['parent_titles']='yes';
    return $out;
}

depuis que nous avons ajouté un espace de noms pour notre plugin.

Nous pourrions aussi créer un filtre à la place:

$this->active = apply_filters( 'wpse_gallery_parent_titles', true, $atts, $pair );

... etc, etc, mais je vais le laisser ici pour l'instant ;-)

3
birgire