我有个问题。我创建了一个短代码来显示galerie。我用过query_posts
要获取父帖子的所有帖子并从中获取数据,请执行以下操作:
function galerie_baureihe() {
$parent_id = get_the_id($post->post_parent); $page_id = $parent_id;
query_posts(array(\'post_type\' => \'page\', \'post_parent\' => $page_id, \'orderby\' => \'title\', \'order\' => ASC, \'posts_per_page\' => \'9999\'));
if (have_posts()) :
while (have_posts()) : the_post();
$return_string .= \'<div class="dynamische-galerie"><div class="col-4"><div class="dynamische-galerie-wrapper"><a href="\'.get_permalink().\'">\'.get_the_post_thumbnail( $post_id, array(285,200) ).\'</a><div class="dynamische-galerie-caption"><a href="\'.get_permalink().\'"><b>\'.get_the_title().\'</b><br>\'.number_format(get_field( \'nettogrundflaeche\' ),2,\',\',\'.\').\'<span> m²</span></a></div></div></div></div>\';
endwhile;
endif;
wp_reset_query();
return $return_string;
}
add_shortcode( \'galerie_baureihe\', \'galerie_baureihe\' );
这很好,但现在我需要在另一端使用这样的短代码
\'post_parent\' => array(376, 379),
而不是
\'post_parent\' => $page_id,
以下是其他代码:
function galerie_klassisch_wohnen() {
query_posts(array(\'post_type\' => \'page\', \'post_parent\' => array(376, 379), \'orderby\' => \'title\', \'order\' => ASC, \'posts_per_page\' => \'9999\'));
if (have_posts()) :
while (have_posts()) : the_post();
$return_string .= \'<div class="dynamische-galerie"><div class="col-4"><div class="dynamische-galerie-wrapper"><a href="\'.get_permalink().\'">\'.get_the_post_thumbnail( $post_id, array(285,200) ).\'</a><div class="dynamische-galerie-caption"><a href="\'.get_permalink().\'"><b>\'.get_the_title().\'</b><br>\'.number_format(get_field( \'nettogrundflaeche\' ),2,\',\',\'.\').\'<span> m²</span></a></div></div></div></div>\';
endwhile;
endif;
wp_reset_query();
return $return_string;
}
add_shortcode( \'galerie_klassisch_wohnen\', \'galerie_klassisch_wohnen\' );
但似乎我无法将数组用于post\\u parent。如果我使用
\'post_parent\' => 376,
它可以工作,但不能与
\'post_parent\' => array(376, 379),
我希望你们能理解我糟糕的英语。如何获得使用数组的短代码?
SO网友:birgire
不建议使用query_posts()
, 检查此示例warning note 在Codex:
此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query_posts()
通过用查询的新实例替换页面的主查询来修改页面的主查询是一种过于简单且有问题的方式。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。任何现代WP代码都应该使用更可靠的方法,例如pre_get_posts
挂钩,用于此目的。
关于post parents数组,您使用了错误的参数。存在post_parent__in
可以处理数组输入的参数。
因此,请尝试此辅助查询,而不是当前查询:
$query = new WP_Query(
array(
\'post_type\' => \'page\',
\'post_parent__in\' => array(376, 379),
\'orderby\' => \'title\',
\'order\' => ASC,
\'posts_per_page\' => 9999
)
);
您还应该考虑使用
$return_string = \'\';
要避免PHP未定义变量,请在使用
.=
用于字符串串联。
然后更换wp_reset_query()
具有wp_reset_postdata()
, 重置$post
主查询的变量。