通过元关键字值获取附件

时间:2015-03-06 作者:ReynierPM

我需要获取与带有meta\\u键的帖子相关联的附件(每个帖子只有一个)wpcf-legislacion-gratis (与列的值无关)通过使用get_posts() 作用我试过两种方法:

$nonActivePlan_args   = array(
    \'order\'           => \'desc\',
    \'meta_query\'          => array(
            array(
                \'key\'     => \'wpcf-legislacion-gratis\',
                \'value\'   => NULL,
                \'compare\' => \'!=\'
            )
    ),
    \'post_status\'         => \'inherit\',
    \'posts_per_page\'      => 1,
    \'post_type\'   => \'attachment\',
    \'post_parent\' => get_the_ID(),
);

$nonActivePlanAttachment = get_posts( $nonActivePlan_args );
if ($nonActivePlanAttachment) {
    foreach ($nonActivePlanAttachment as $attachment) { ?>
        <div class="legislacion-ico">
            <a class="pdf" href="<?php echo wp_get_attachment_url( $attachment->ID, true ); ?>">
                <img src="<?php echo get_template_directory_uri(); ?>/images/ico_descargas.png">
                <br>
                Descargar PDF
            </a>
        </div>
    <?php
    }
}

wp_reset_postdata();
关于上述问题,我有以下疑问:

如何编写查询以查找meta\\u键等于的附件wpcf-legislacion-gratis 不管它有什么价值wpcf-legislacion-gratis 每一篇文章,我是否需要对结果进行循环?不应该只有一个吗wp_reset_postdata()?我也尝试过此代码:

$nonActivePlan_args   = array(
    \'order\'             => \'desc\',
    \'meta_key\'          => \'wpcf-legislacion-gratis\',
    \'post_status\'       => \'inherit\',
    \'posts_per_page\'    => 1,
    \'post_type\'         => \'attachment\',
    \'post_parent\'       => get_the_ID(),
);
但这不起作用,意味着我无法从DB获得任何价值。这是我在MySQL命令行上执行的查询结果:

SELECT * FROM `wp_postmeta` where post_id=\'11839\';
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
| meta_id | post_id | meta_key                | meta_value                                                                        |
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
|   22149 |   11839 | wpcf-legislacion-gratis | http://jurisprudencia.dev/wp-content/uploads/2015/02/modelodatos.pdf              |
|   22150 |   11839 | wpcf-legislacion-pagada | http://jurisprudencia.dev/wp-content/uploads/2015/02/AtencionUsuario_version1.pdf |
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
我还检查了文档herehere 但对我没有任何帮助。

如何获取附件?有什么帮助或建议吗?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我想你想要的是get_post_meta() 而不是自定义查询。

原因:

  • 自定义字段的结果会被缓存,并且在达到性能时会非常简化。你可以阅读this answer 我最近做了一些解释

  • 您正试图在单个帖子页面中将自定义字段附加到帖子。这是什么get_post_meta() 设计用于

您可以将所有代码替换为以下内容:(从codex修改而来)

$key_1_value = get_post_meta( get_the_ID(), \'wpcf-legislacion-gratis\', true ); 
// check if the custom field has a value 
if( ! empty( $key_1_value ) ) { 
    echo $key_1_value; 
} 
编辑如果需要在循环之外获取自定义字段值,如在侧栏或函数中,则需要替换get_the_ID() 具有get_queried_object_id()

$key_1_value = get_post_meta( get_queried_object_id(), \'wpcf-legislacion-gratis\', true ); 
// check if the custom field has a value 
if( ! empty( $key_1_value ) ) { 
    echo $key_1_value; 
} 

结束