获取内容中包含二级循环的页面的ID

时间:2015-12-13 作者:Abhik

我正在尝试获取一个页面的ID(在循环之外),该页面的内容中有另一个CPT的循环,使用一个短代码。

如果我做了print_r 属于get_queried_object(), 如果我echo $post->ID 我获取二次循环中最后一项的ID
如果我echo get_queried_object_id(), 我明白了0 总是

下面是我当前使用的代码

function get_meta_values() {
    global $post;
    $queried_object = get_queried_object();
    echo \'<pre>\';
    print_r( $queried_object ); //Returns args used to register the CPT
    echo \'<br> $queried_object->ID: \' . $queried_object->ID; //Returns Nothing
    echo \'<br>get_queried_object_id(): \'. get_queried_object_id(); // Returns 0 all the time
    echo.\'<br>PageID: \' . $post->ID; // Returns the ID of last item in the secondary loop
    echo \'</pre>\';

}
add_action( \'wp_footer\', \'get_meta_values\' );  
我的目标是获取页面的ID(其中短代码是)以检索一些自定义字段值。

EDIT: 我使用的是WooCommerce,但输出产品的快捷码是custom。我知道我可以通过其他方式绕过这个问题,但我只是好奇为什么这不起作用。

1 个回复
SO网友:iantsch

正如其他人已经发现的那样:如果您有带有自定义查询的第三方插件,那么您将度过糟糕的一天!

一种解决方案可能是缓存结果。

Template (例如:page.php)

while (have_posts()): the_post();
    global $my_cached_data;
    $post_id = get_the_ID();
    /* 
     * If you have single meta keys, this array_map function 
     * makes them easy to access; otherwise just use:
     *
     * $my_cached_data[$post_id] = get_post_meta( $post_id) 
     */
    $my_cached_data[$post_id] = array_map( 
        function( $a )
        { 
            return $a[0]; 
        }, 
        get_post_meta( $post_id) 
    );
endwhile;

footer.php

global $my_cached_data;
echo "<pre>".print_r($my_cached_data, true)."</pre>";
Possible Result (页面ID 2和15具有相同的post元数据)

array(2) {
  [2]=>
  array(2) {
        ["meta_key"]=>
    string(10) "meta_value"
        ["another_key"]=>
    string(10) "meta_value"
  }
  [15]=>
  array(2) {
        ["meta_key"]=>
    string(10) "meta_value"
        ["another_key"]=>
    string(10) "meta_value"
  }
}

相关推荐

WordPress问题:无法将上载的文件移动到wp-Content/Uploads/

我在Fedora运行的机器中创建了一个本地WordPress 4.9.8安装程序,其中包含PHP 7。当我尝试将媒体上传到WordPress管理员时,它一直在说上载的文件无法移动到wp内容/上载/我已经为内容/上传目录授予了完整(777)文件权限,但仍然出现了相同的错误。最后,我尝试手动创建目录结构,并自己放置媒体文件,如下所示/var/www/html/test-jp/wp-content/uploads/2018/09/1024-xxxxx-logo。巴布亚新几内亚原因可能是什么?