web-dev-qa-db-ja.com

Meta_key値で添付ファイルを取得する

get_posts()関数を使用してカスタムクエリを使用して、meta_key wpcf-legislacion-gratisを持つ投稿に関連付けられた添付ファイル(投稿ごとに1つだけ)を取得する必要があります(列の値に関係なく)。私はこれを二つの方法で試しました:

$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();

上記のものに関連して、私はこの疑問を持っています:

  • wpcf-legislacion-gratisに等しいmeta_keyを持つ添付ファイルを見つけるためのクエリをどのように作成すればよいですか。
  • この場合のループは正しいですか。 1つの投稿につき1つの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 |
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+

私はまたドキュメント をここここ でチェックしましたが、何も見つかりませんでした私には役に立ちました。

添付ファイルを入手するにはどうすればよいですか。何か手助けやアドバイスは?

1
ReynierPM

私はあなたが後にいるのはget_post_meta()であり、カスタムクエリではないと思います。

理由:

  • カスタムフィールドからの結果はキャッシュされ、パフォーマンスが向上すると非常に合理化されます。あなたは この答えを読むことができます 私は最近すべてを説明します

  • 1つの投稿ページでのみカスタムフィールドを投稿に添付しようとしています。これが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; 
} 
1
Pieter Goosen