尝试在Archive.php中列出自定义帖子类型时,Foreach中的参数无效

时间:2020-11-28 作者:Botond Vajna

我尝试在存档中列出自定义帖子类型的页面。php,我得到以下错误消息:

为foreach()提供的参数无效

$post_type = get_post_type( get_the_ID() );
$pages = get_pages(array( \'post_type\' => $post_type ) );
    foreach ($pages as $page ) {
        echo \'<div class = "prop-sidebar-section">\';
        echo $page->post_title;
        echo \'</div>\';
    }
奇怪的是get_pages(array( \'post_type\' => \'page\'); 正在工作,如果我使用 get_pages(array( \'post_type\' => \'post\') ); 不是。

3 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

get_pages() 仅适用于层次结构的帖子类型,如page. 对于非层级职位类型,如post, get_pages() 将返回false, 这就解释了为什么get_pages( array( \'post_type\' => \'post\' ) ) "E;“不起作用”;,i、 e.返回的值不是数组,因此不能与一起使用foreach:

// Good: \'page\' is a hierarchical post type.
$pages = get_pages( array( \'post_type\' => \'page\' ) );
// Output: $pages is an array. Can do foreach ( $pages ... )

// Not good: \'post\' is a non-hierarchical post type.
$posts = get_pages( array( \'post_type\' => \'post\' ) );
// Output: $posts is a FALSE. Can\'t do foreach ( $posts ... )
// because foreach ( false ... ) is invalid.
因此,对于非层次结构的帖子类型,您可以使用get_posts() 或创建一个新实例WP_Query (即。new WP_Query()):

$posts = get_posts( array( \'post_type\' => \'post\' ) );

// or..
$query = new WP_Query( array( \'post_type\' => \'post\' ) );
$posts = $query->posts;

SO网友:user3575665

我假设您的代码不在wordpress循环中,类似于while(have_posts()): the_post();这意味着get\\u the\\u ID将返回null,请尝试var\\u dump(get\\u the\\u ID);如果为空,这就是代码不工作的原因。

要获取您的帖子类型,您可以使用以下内容:

var_dump($wp_query->query,get_queried_object()); die;
$wp_query->query 将具有自定义帖子类型的post\\u type组件。这对于post post类型来说是不存在的。get\\u queryed\\u对象将为自定义post类型返回大量数据,但为post post类型返回null。

SO网友:tiago calado

运行此代码并将返回您得到的所有内容,然后您可以检查$post\\u type是否返回“page”或“your\\u custom\\u post\\u type”,还可以检查函数get\\u pages()的所有可用内容;

$post_type = get_post_type( get_the_ID() );
echo \'<pre>\';
print_r($post_type);
echo \'<br> ####################################### <br>\';
$pages = get_pages(array( \'sort_order\'   => \'ASC\',
    \'sort_column\'  => \'post_title\',
    \'hierarchical\' => 1,) );
echo \'<pre>\';
print_r($pages);
在我的例子中,只有$post\\u type返回“page”,并且$pages有很多信息,但所有post\\u类型都是“page”。希望能对你有所帮助!。。

几分钟后,在阅读了Sally CJ的答案后,我使用了get\\u贴子,效果很好。

$post_type = get_post_type( get_the_ID() );
$pages = get_posts( array( \'post_type\' => $post_type ) );
    foreach ($pages as $page ) {
        echo \'<div class = "prop-sidebar-section">\';
        echo $page->post_title;
        echo \'</div>\';
    }

相关推荐

Problem With Pages Displaying

除了我叔叔的主页显示之外,我的任何页面都有问题。该站点最近已从一台主机迁移到另一台主机。所有页面都显示在WP后端,并且都已格式化,所有内容都在那里,但当我单击菜单链接时,会出现错误404。我创建了一个测试页面来查看新页面发生了什么。它工作并显示为预览,但在我发布后,同样的事情发生了,错误404。该网站是www.andyvalvur。com上托管,来自Inmotion托管。有什么想法吗?我感谢你所能提供的一切帮助。