it-swarm.com.de

Nehmen Sie die in functions.php festgelegten Variablen und geben Sie sie in meiner benutzerdefinierten Post-Vorlage wieder

Ich habe die folgende Funktion in meiner functions.php-Datei eingerichtet, damit mein benutzerdefinierter Beitragstyp "Diashow" funktioniert.

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 );
    }
}

Dieser Teil zeigt die Ausgabe an:

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

Es wird dort angezeigt, wo the_content in meiner Vorlage aufgerufen wird. Anstatt die Teile dort in meiner functions.php zusammenzufügen, möchte ich jedes Teil direkt in meiner Custom Post-Vorlage genau dort aufrufen können, wo ich es haben möchte. Zum Beispiel, indem Sie <?php echo $desc; ?> in meine Vorlagendatei einfügen, wo die Beschreibung angezeigt werden soll und <?php echo $title; ?>, wo der Titel angezeigt werden soll.

Ich habe ein paar verschiedene Methoden ausprobiert, kann aber nichts zum Anzeigen bringen.

Wie kann ich diese Variablen modularer gestalten, ohne von vorne anfangen oder meine gesamte Vorlage neu entwerfen zu müssen (sie können beliebig in meine Vorlage eingefügt werden)?

2
matt

Sie müssen sich nur Ihre $page- und $pages-Variablen ansehen und dasselbe mit Ihrer $desc-Variablen (und jeder anderen Variablen, auf die Sie außerhalb der Funktion zugreifen möchten) tun.

Sie benötigen einen globalen $descs, bei dem es sich um ein Array handelt, in das Sie jeden der $desc-Werte einfügen. Verwenden Sie dabei etwa $descs[] = $desc; direkt nach dem Code $pages[] = $page;. Dann würden Sie auf $descs außerhalb der Funktion zugreifen, denken Sie daran, dass es sich um ein Array handelt.


Normalerweise müssen Sie $desc in der Vorlagendatei, in der Sie es verwenden möchten, als global deklarieren, z. Sie müssen dies verwenden:

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

Es ist möglicherweise besser, eine Umbruchfunktion zu verwenden, die Ihre $desc -Variable zurückgibt, oder diese in Ihrer Vorlagendatei wiederzugeben und aufzurufen, z. platziere so etwas in deiner functions.php:

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

und dann in deiner Vorlagendatei:

<?php echo foo_bar();?>

Beachten Sie, dass diese Wrapping-Funktion nicht wie sie ist funktioniert, da es so aussieht, als hätten Sie etwas aus einem PHP Schleifenkonstrukt herausgegriffen. Möglicherweise müssen Sie $ id, $ key, $ i und $ custom an die Funktion übergeben oder als globale Elemente in der Funktion deklarieren. Ohne den Kontext zu kennen, kann ich Ihnen nicht sagen, welcher Weg für Sie besser funktioniert.

1
mtekk