web-dev-qa-db-fra.com

Comment utiliser l'attribut shortcode dans une fonction séparée

Je travaille sur un site WordPress et ai installé un plugin de curseur qui enregistre un curseur sur le backend (ou plusieurs curseurs), puis l’affiche au début avec quelques extraits php simples. J'essaie de modifier le plugin pour pouvoir faire la même chose avec un shortcode. Je veux que le shortcode puisse enregistrer le plugin sur le backend et l'afficher au front-end en utilisant quelque chose comme: [responsive_gallery slider_name="slider"].

J'ai cette partie en bas et je peux même afficher le curseur en utilisant le shortcode. J'ai juste du mal à l'enregistrement sur le backend. Mon code au bas fonctionne, mais j'espérais qu'il y avait un moyen de récupérer la valeur stockée dans le tableau d'attributs shortcode ($ nom_liste) et de l'utiliser dans la fonction set_flexslider_hg_rotators(). J'ai essayé pendant des heures et je ne peux rien faire fonctionner. Des suggestions sur la meilleure façon de faire cela?

Voici le code du plugin:

Enregistrement du backend:

function set_flexslider_hg_rotators()
{
  $rotators = array();
  $rotators['homepage'] = array( 'size' => 'homepage-rotator' );
  return $rotators;
}
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

Affichage frontal:

<?php if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( 'homepage' ); ?>

Voici mon code de travail:

function responsive_gallery_shortcode($atts, $content=null) {
    extract(shortcode_atts( array('slider_name' => 'product_page') , $atts));

    if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( $slider_name );
    add_image_size( $slider_name , '550', '250', true );
}
add_shortcode('responsive_gallery', 'responsive_gallery_shortcode');        

function set_flexslider_hg_rotators() {
    $rotators = array();
    $rotators[ 'product_page' ] = array( 'size' => 'product_page' );
    return $rotators;
}   
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

Je veux pouvoir utiliser $ slider_name dans la fonction set_flexslider_hg_rotators, mais je ne sais pas quel serait le meilleur moyen de le faire (ni même si c'est possible). J'aimerais que ça ressemble à quelque chose comme:

function set_flexslider_hg_rotators()
{
  $rotators = array();
  $rotators[$slider_name] = array( 'size' => $slider_name );
  return $rotators;
}
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

Comme $ slider_name n'est pas global, cette fonction ne renvoie rien (comme prévu). Y a-t-il un moyen de faire quelque chose de semblable?

2
Jeremiah Prummer

Pour pouvoir utiliser une variable qui est essentiellement créée dans la fonction de code court, vous devez la stocker quelque part, puis récupérer la valeur. Wordpress utilise des variables globales en interne pour stocker et transmettre des valeurs, mais je ne vous conseillerais pas de faire la même chose.

Lisez à propos des options API ici . Fonctionnalité assez simple.

Donc, quelque chose comme ce qui suit pourrait fonctionner dans votre fonction de shortcode:

update_option('_unique_slider_name', $slider_name);

Ensuite, à l'intérieur de votre fonction de filtrage (ou n'importe où), vous pouvez accéder à la valeur suivante:

$slider_name = get_option('_unique_slider_name');

La valeur sera mise en cache, alors ne vous inquiétez pas des accès répétés à la base de données lorsque vous essayez d'accéder à la valeur.

1
Dwayne Charrington