Suporte » Plugins » Campos Personalizados: Listar posts com conteúdo em um field_name

  • Estou usando Campos Personalizados em um catálogo de filmes e preciso listas todos os filmes que tenham TRAILLER. Criei um field_name chamado “trailler” e queria listar APENAS os posts em que eu inseri o link do filme (youtube ou vimeo).

    Tentei usar isso e não funcionou:

    <ul>
     <?php
     global $post;
     $myposts = get_posts('numberposts=500&orderby=title&order=ASC&field_name=trailler&meta_value=http');
     foreach($myposts as $post) :
     ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
     <?php endforeach; ?>
     </ul>

    O field_name=trailler e o resultado, o meta_value=http porque tanto os links do youtube como os do vimeo começam com http… mas não listou =(

    Queria que listasse os títulos dos posts que tenham trailler.
    Alguém pode me ajudar?

Visualizando 7 respostas - 1 até 7 (de um total de 7)
  • Moderador Allyson Souza

    (@allysonsouza)

    O que você precisa fazer é uma meta_query: http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

    E meta_value=http não vai adiantar nada, ele retornaria apenas os campos que tivesse como valor APENAS ‘http’, nada além disso (o código não vai entender que é “tudo que começa com http…’)

    Acho que o que você precisa é buscar apenas pela meta_key=’trailler’.

    Espero que ajude.

    Criador do tópico Philipe Ribeiro

    (@philiperibeiro)

    Quando tento listar usando só a meta_key=’trailler’ lista é todos os posts =(

    Eu preciso listar todos os posts em que foi digitado algo no field_name que chamei de “trailler”.

    Algo como:

    <?php
     global $post;
     $myposts = get_posts('field_name=trailler&ALGO_QUE_FILTRE_SÓ_OS_POSTS_COM_TRAILLER');
     foreach($myposts as $post) :
     ?>

    Testei alguns exemplos que tinham no link que você passou e não deu certo =(

    Moderador Allyson Souza

    (@allysonsouza)

    Então philiperibeiro, acredito que você não vá consegui filtar na query quais posts tem o campo preenchido, isso você terá de avaliar depois de feita a query.

    Utilizando get_post_meta() ou get_post_custom(), dentro do loop, você tem de verificar se o campo está preenchido ou não, e a partir desta verificação decidir se o exibe ou não.

    Philipe você conseguirá utilizando uma wp_query como a do post http://br.forums.wordpress.org/topic/campos-personalizados-listar-posts-com-1-field_name-e-2-meta_value?replies=5#post-59396

    Alterando apenas

    array(
        "key" => "trailler",
        "value" => "http%",
        "compare" => "LIKE"
    )

    Criador do tópico Philipe Ribeiro

    (@philiperibeiro)

    Siderlan, incluí sua sugestão e não rodou =( Usei outro campo personalizado e também não rodou… Escrevi assim:

    <?php
    $args = array(
    	'posts_per_page' => 500,
    	'orderby' => 'title',
    	'order' => 'ASC',
    	'meta_query' => array(
    		array(
        'key' => 'logger',
        'value' => 'test%',
        'compare' => 'LIKE'
    )
      	)
    );
    
    $my_query = new WP_Query($args);?>
    
    <ul>
      <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> </a></li>
      <?php  endwhile; ?>
    </ul>

    E depois escrevi como você disse, assim:

    <?php
    $args = array(
    	'posts_per_page' => 500,
    	'orderby' => 'title',
    	'order' => 'ASC',
    	'meta_query' => array(
    		array(
        "key" => "logger",
        "value" => "test%",
        "compare" => "LIKE"
    )
      	)
    );
    
    $my_query = new WP_Query($args);?>
    
    <ul>
      <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> </a></li>
      <?php  endwhile; ?>
    </ul>

    Nos posts com o campo personalizado “logger” escrevi o texto teste em um e o texto testando em outro post, por isso que o “value” => “test%”… =(

    O “key” deve ser o nome do meta field. Você pode acrescentar outra porcentagem antes do valor “value” => “%valor%”, e continua utilizando o “compare” como “LIKE”, dai você garante que ele vai trazer qualquer um que no valor, contenha o termo utilizado, não importando se está no começo, no meio ou no final.

    Criador do tópico Philipe Ribeiro

    (@philiperibeiro)

    Pus a porcentagem antes do valor e não deu certo… mudei o meta_field e não deu certo. Mudei o ‘ por ” e também não deu certo. O último código que usei foi esse:

    <?php
    $args = array(
    	'posts_per_page' => 500,
    	'orderby' => 'title',
    	'order' => 'ASC',
    	'meta_query' => array(
    		array(
        'key' => 'trailler',
        'value' => '%http%',
        'compare' => 'LIKE'
    )
      	)
    );
    
    $my_query = new WP_Query($args);?>
    
    <ul>
      <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> </a></li>
      <?php  endwhile; ?>
    </ul>
Visualizando 7 respostas - 1 até 7 (de um total de 7)
  • O tópico ‘Campos Personalizados: Listar posts com conteúdo em um field_name’ está fechado para novas respostas.