php - PHP header 中的数组在 WordPress 中不是全局的

标签 php arrays wordpress global

我正在 header 中创建一个项目数组,该数组将在 WordPress 模板的索引文件中调用。但由于某种原因我得到:

Notice: Undefined variable: img_arr in ... on line 27

为什么在我的 header 中定义它时会发生这种情况:

 $img_arr = array();
 $caption_arr = array();

    // Second Featured Image        
        if (class_exists('MultiPostThumbnails')) {
                $image_name = "second-image";
            if (MultiPostThumbnails::has_post_thumbnail('page', $image_name)) {
                $image_id = MultiPostThumbnails::get_post_thumbnail_id( 'page', $image_name, $post->ID );
                $attr = array('class' => "featured-image");
                $image_2 = wp_get_attachment_image( $image_id, 'second-image', false, $attr );
                array_push($img_arr, $image_2);
            }
        };
        $post_thumbnail_id = MultiPostThumbnails::get_post_thumbnail_id( get_post_type(), 'second-image', get_queried_object_id() );
        $post_thumbnail_post = get_post( $post_thumbnail_id );
        $caption_2 = trim( strip_tags( $post_thumbnail_post->post_excerpt ) );
        array_push($caption_arr, $caption_2);

这允许用户添加多个特色图像,最多可达十张图像。但它在索引文件中无法识别:

foreach($img_arr as $key => $value) {
    echo $value;
    echo '<div class="featured-image-caption">';
    echo $caption[$key];
    echo '</div>';
}

我已经为此工作了很多小时,所以我可能会忽略一些非常简单的事情。或者 WordPress 函数 get_header() 是否可能不允许数组在文件之间移动?如果是这样,我是否可以在我的 functions.php 中添加一些内容以允许数组更加全局化?

最佳答案

我非常确定 WordPress API 结构不允许您按照您认为与直接 PHP 一起工作的方式传递变量或数组。因此,请考虑使用 global variable scope实现此功能的目标:

global $img_arr $caption_arr;

因此,在索引文件中,您可以执行以下操作:

global $img_arr $caption_arr;
foreach($img_arr as $key => $value) {
    echo $value;
    echo '<div class="featured-image-caption">';
    echo $caption[$key];
    echo '</div>';
}

或者你可以用$GLOBALS来做到这一点:

$GLOBALS['img_arr'] = array();
$GLOBALS['caption_arr'] = array();

然后像这样访问值:

foreach($GLOBALS['img_arr'] as $key => $value) {
    echo $value;
    echo '<div class="featured-image-caption">';
    echo $GLOBALS['caption_arr'][$key];
    echo '</div>';
}

您还可以这样做来初始化数组:

$img_arr = array();
$caption_arr = array();

这意味着一切要从头开始,对吧?

那你为什么要这样做:

array_push($img_arr, $image_2);
array_push($caption_arr, $caption_2);

Wny 不只是像这样简单地增加数组:

$img_arr[] = $image_2;
$caption_arr[] = $caption_2;

关于php - PHP header 中的数组在 WordPress 中不是全局的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093208/

相关文章:

php - 在 mysql WHERE 子句中传递 5,000 到 100,000 个值的正确方法

php - 我如何根据该表的结果求和/分组

C - 数组超出范围

javascript - 字典多项选择

php - 如何使用 Wordpress 中的另一个表获取最多查看的帖子

PHP/Mysql偏移错误

php - 选择并取消链接 3 个表上的文件

c++ - 全局数组在正常声明但不作为指针时导致段错误

javascript - 如何创建显示当前网页屏幕截图的打印对话框

html - 忽略高度的表格单元格