为什么具有相同参数的get_posts会在不同的页面中检索不同的结果?

时间:2015-07-09 09:41:15

标签: php wordpress woocommerce advanced-custom-fields

我在理解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()函数返回一个字符串而不是一个对象数组。

有什么想法吗?

0 个答案:

没有答案