我对WordPress并不完全陌生,但查询的事情让我有点困惑。我在网上搜索了很多文章,但找不到我需要的东西。也许它可以帮助很多像我这样有文字处理技能的人。
我想创建一个短代码,并需要遍历一个名为events的自定义post类型。
function leweb_get_suggested_events() {
// Query
global $wp_query;
// Arguments
$args = array(
\'post_type\' => \'events\',
);
ob_start();
$query = new WP_Query( $args );
if( $query->have_posts() ) {
echo \'<ul>\';
while( $query->have_posts() ) {
$query->the_post();
echo \'<li>\' . get_the_title() . \'</li>\';
}
echo \'</ul>\';
}
$output = ob_get_clean();
return $output;
}
add_shortcode( \'leweb_suggested_events\', \'leweb_get_suggested_events\' );
该查询是正确的,并且正在运行。但我应该重置一些东西吗?
我称之为全球$wp_query
进入主回路。这是我在读一些文章时发现的。
然后我开始自己的循环$query = new WP_Query($args);
所以我有两个循环,对吗?主循环和我自己的循环。
Should I reset them both or just one of them, or is it fine like above?
最合适的回答,由SO网友:Tom J Nowell 整理而成
该查询是正确的,并且正在运行。但我应该重置一些东西吗?
对
我应该同时重置它们还是只重置其中一个,或者像上面那样可以吗?
Neither!
你的
WP_Query
对象自包含在中
$query
, 所以没有理由去碰
$wp_query
全局变量,为什么要?
$wp_query
表示主查询,所以不要管它。
你需要重置的是当前帖子。注意$query->the_post()
设置当前帖子,循环结束后需要撤消该帖子:
if( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
....
}
wp_reset_postdata();
}
打开一个单词wp_reset_query()
The
wp_reset_query()
功能是你在研究中可能看到的东西,但要避免这种情况。打算在
query_posts
, 这是一个你永远不应该使用的函数。
如果你发现自己需要使用query_posts
, 或wp_reset_query
在你的客户工作中,出现了严重的问题。把它们从你的记忆中抹去,当你在代码中看到它们时尖叫,然后用极端的预感重构它们。
短代码和块
您是否考虑过将其转换为GB块而不是短代码?只需创建一个用PHP呈现的块,无需学习React或advanced JS