web-dev-qa-db-fra.com

Prendre les variables définies dans Functions.php et les mettre en écho dans mon modèle de publication personnalisée

La fonction suivante est configurée dans mon fichier functions.php pour permettre à mon type de message personnalisé "Slideshow" de fonctionner.

add_action( 'the_post', 'paginate_slide' );

function paginate_slide( $post ) {

    global $pages, $multipage, $numpages;

    if( is_single() && get_post_type() == 'lom_slideshow' ) {
    $prefix = "slide{$i}";
    $multipage = 1;
    $id = get_the_ID();
    $custom = array();
    $pages = array();
    $i = 1;

    foreach( get_post_custom_keys() as $key )
        if ( false !== strpos( $key, 'slide' ) )
            $custom[$key] = get_post_meta( $id, $key, true);

    while( isset( $custom["slide{$i}-title"] ) ) {

    $hide = $custom["slide{$i}-hide"];
    $slidetype = $custom["slide{$i}-slidetype"];

    if( 'on' == $hide ) {
    $i++;
    continue;
                        }

        $page = '';
        $title = $custom["slide{$i}-title"];
        $image = $custom["slide{$i}-image"];
        $desc = $custom["slide{$i}-desc"];
        $embed = $custom["slide{$i}-embed"];
        if(isset($image))
        $imgdisplay = "<img src='{$image}' />";
        else
        $imgdisplay = '';

    if( 'Video' == $slidetype ) 

        $page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$embed}</div><div class='media-desc'></div>";
    else
        $page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$imgdisplay}</div><div class='media-desc'>{$desc}</div>";
        $pages[] = $page;
        $i++;
    }
    $numpages = count( $pages );
    }
}

Cette partie affiche la sortie:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$embed}</div><div class='media-desc'></div>";

Il affiche là où the_content est appelé dans mon modèle. Plutôt que de rassembler les éléments dans mon fichier functions.php, j'aimerais pouvoir appeler chaque élément directement dans mon modèle de message personnalisé exactement où je le souhaite. Par exemple, en plaçant <?php echo $desc; ?> dans mon fichier de modèle où je souhaite afficher la description et <?php echo $title; ?> où je souhaite afficher le titre.

J'ai essayé plusieurs façons mais je ne peux rien afficher.

Sans recommencer à zéro ou repenser tout mon modèle, comment puis-je rendre ces variables plus modulaires (pouvoir être placées à volonté dans mon modèle)?

2
matt

Ce que vous devez faire, c'est examiner vos variables $page et $pages et faire la même chose avec votre variable $desc (et toute autre variable à laquelle vous souhaitez accéder en dehors de la fonction).

Vous aurez besoin d'un $descs global qui sera un tableau dans lequel vous placerez chacune des valeurs $desc, en utilisant quelque chose comme $descs[] = $desc; juste après le code $pages[] = $page;. Ensuite, vous accéderiez à $descs en dehors de la fonction, rappelez-vous qu'il s'agit d'un tableau.


En règle générale, vous devez déclarer $desc en tant que global dans le fichier de modèle dans lequel vous souhaitez l’utiliser, par exemple. vous devez utiliser ceci:

<?php global $desc;
echo $desc;?>

Il peut être préférable d’utiliser une fonction d’emballage qui renvoie ou renvoie votre variable $desc et appelez-la à partir de votre fichier de modèle, par exemple. Placez quelque chose comme ceci dans votre functions.php:

function foo_bar()
{
$custom[$key] = get_post_meta( $id, $key, true);
return $custom["slide{$i}-desc"];
}

et ensuite dans votre fichier de modèle utilisez ceci:

<?php echo foo_bar();?>

Notez que cette fonction d'habillage ne fonctionnera pas telle quelle, car il semblerait que vous ayez récupéré quelque chose dans une construction de boucle PHP. Vous devrez peut-être transmettre $ id, $ key, $ i et $ custom à la fonction, ou les déclarer en tant que globaux dans la fonction. Sans connaître le contexte, je ne peux pas vous dire de quelle manière cela fonctionnera le mieux pour vous.

1
mtekk