Chcę zawinąć mój kod w funkcję (a następnie umieścić go w functions.php), abym mógł wywołać go w innym miejscu, ale mój kod nie powiedzie się, gdy tylko zapakuję go w funkcję.

Myślę, że może to być kwestia zakresu, czy muszę jakoś przekazać numer postu do funkcji? Jeśli pozbędę się funkcji, która jest owinięta wokół zapytania, kod działa poprawnie.

Domyślam się, że kod jest naprawdę nieistotny (choć może się mylę) - chodzi bardziej o to, że jest to pętla i funkcja.

        <?php function getGallery2() { ?>
            <!-- 1. search for any pages with a custom field of 'test' that have a value of 'yes' -->
            <?php query_posts('meta_key=Gallery - Promotion Gallery Photo Link&post_type=page'); ?>

            <?php while ( have_posts() ) : the_post(); ?>
                <!-- 2. echo the test field -->
                <?php $link =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Link', true); ?>
                <?php $alt =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Alt text', true); ?>
                <img src="<?php echo $link ?>" alt="<?php echo $alt ?>" />
            <?php endwhile;?>

            <?php wp_reset_query(); ?>

        <?php } ?>

        <?php getGallery2(); ?>
0
SparrwHawk 14 luty 2012, 20:55

2 odpowiedzi

Najlepsza odpowiedź

$post nie znajduje się w zakresie funkcji.

Możesz dodać global $post; na górze funkcji lub możesz dołączyć go jako parametr w następujący sposób:

function getGallery2($post){
    // code
}

echo getGallery2($post)

Kod wewnątrz funkcji może zobaczyć tylko zmienne, które zostały utworzone w ramach tej samej funkcji lub w zakresie globalnym. Oznacza to, że obiekt $post jest niezdefiniowany.

// Trochę nie na temat, masz dużo komentarzy HTML w PHP. Możesz łatwo posprzątać wszystko p, robiąc wszystko w PHP.

EDYTOWAĆ:

function getGallery2(){

    global $post;

    // 1. search for any pages with a custom field of 'test' that have a value of 'yes' -->
    query_posts('meta_key=Gallery - Promotion Gallery Photo Link&post_type=page'); 

    while ( have_posts() ) : the_post(); 
        // 2. echo the test field -->
        $link =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Link', true); 
        $alt =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Alt text', true); 
        echo '<img src="'.$link.'" alt="echo $alt " />';
    endwhile;

    wp_reset_query(); 

} 

getGallery2();
0
472084 15 luty 2012, 13:02

Miałbyś to coś takiego jak myślę (nie testowane):

<?php function getGallery2() { ?>
    $global post;       
    $link =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Link', true); ?>
    $alt =  get_post_meta($post->ID, 'Gallery - Promotion Gallery Photo Alt text', true); ?>
            <img src="<?php echo $link ?>" alt="<?php echo $alt ?>" />
<?php } ?>

Następnie wywołaj funkcję w dowolnej pętli na dowolnej stronie PHP. Ma sens? tj. nie zapętlaj się w funkcji. Nie rozumiem, dlaczego po prostu nie używasz dołączania php? tj.

require('get-gallery.php');

Mam nadzieję, że pomaga: D

1
Nagra 15 luty 2012, 02:46