it-swarm-eu.dev

Vezměte proměnné nastavené v Functions.php a Echo je uvnitř mé vlastní šablony

Mám následující funkci nastavit v mém souboru function.php, aby můj vlastní příspěvek typu "Slideshow" do práce.

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

Tato část zobrazuje výstup:

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

Zobrazí se tam, kde je v mé šabloně voláno the_content. Spíše než dát dohromady kousky v mém function.php bych chtěl být schopen zavolat každý kus přímo v mé šabloně vlastního příspěvku přesně tam, kde ho chci. Například vložením <?php echo $desc; ?> do mého souboru šablony, kde chci, aby se popis zobrazoval a <?php echo $title; ?> kde chci, aby se název zobrazoval.

Vyzkoušela jsem několik různých způsobů, ale nemůžu nic zobrazit.

Bez toho, abych začínal od nuly nebo přepracoval celou šablonu, jak mohu tyto proměnné vytvořit modulárněji (lze je umístit v rámci šablony)?

2
matt

Co musíte udělat, je podívat se na proměnné $page a $pages a udělat to samé s proměnnou $desc (a jakoukoli jinou proměnnou, ke které chcete přistupovat mimo tuto funkci).

Budete potřebovat globální $descs, které bude maticí, do které umístíte v každé z hodnot $desc, pomocí něco jako $descs[] = $desc; hned za kódem $pages[] = $page;. Pak budete mít přístup k $descs mimo funkci, nezapomeňte, že se jedná o pole.


Obvykle je třeba deklarovat $desc jako globální soubor šablony, který chcete použít, např. musíte použít toto:

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

Může být lepší použít funkci obtékání, která vrací, nebo echos vaši proměnnou $desc a zavolat ji z vašeho souboru šablony, např. umístěte něco takového do svých funkcí.php:

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

a pak v souboru šablony použijte toto:

<?php echo foo_bar();?>

Všimněte si, že tato funkce zabalení nebude fungovat tak, jak to vypadá, protože to vypadá, že jste popadli něco z konstrukce smyčky PHP. Možná budete muset předat funkci $ id, $ key, $ i a $ vlastní funkci nebo je deklarovat jako globály ve funkci. Bez znalosti kontextu vám nemohu říci, kterou cestou pro vás bude fungovat lépe.

1
mtekk