我在理解get_posts()内部如何工作方面遇到了一些困难。我在archive-product.php(WooCommerce)和portfolio-page.php(页面模板)中都有以下代码:
<?php
$argsTest = array(
'posts_per_page' => 1,
'post_type' => 'acf-field',
'orderby' => 'menu_order title',
'order' => 'ASC',
'suppress_filters' => false,
'acf_field_key' => 'field_544e9db1d8f54'
);
$results = new WP_Query( $argsTest );
echo $results->request;
?>
返回以下SQL字符串和portfolio-page.php的结果:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'acf-field' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND wp_posts.post_name = 'field_544e9db1d8f54' ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC LIMIT 0, 1
Result:
ID
----
2423
在我的archive-product.php中:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND ( (wp_postmeta.meta_key = '_visibility' AND CAST(wp_postmeta.meta_value AS CHAR) IN ('visible','catalog')) ) GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC LIMIT 0, 20
Result:
ID
----
2534
----
2533
----
2536
----
2537
----
(那些是产品ID,我不明白为什么)
我想要实现的目标比这更复杂但我想以明确的方式处理事情,但如果这有助于澄清它的建议,那么这就是我实际上要做的事情:
使用高级自定义字段(ACF)插件,我正在尝试get_field('portfolio_items', woocommerce_get_page_id('shop'));
(与管理员中的转发器字段相关)
由于某种原因,我没有得到应该是对象列表的预期结果,而是我得到一个字符串,其中包含转发器字段(admin)string '4'
中当前项目的数量。
我希望任何页面都可以使用相同的查询获得相同的结果,这就是我假设我的get_field()
函数返回一个字符串而不是一个对象数组。
有什么想法吗?