Suporte » Desenvolvendo com WordPress » Retornar posts favoritados de um usuário ‘X’

  • Resolvido Nura

    (@archer-master)


    Boa noite, estou utilizando o plugin “Love Me” para favoritar as ‘séries’ prediletas do usuário ‘X’, gostaria de saber como faço para pegar as últimas 4 selecionadas do usuário, em uma página de membro customizada. Tenho essa função feita, mas não retorna as postagens favoritas.

    Página Ilustrativa da área do membro

    <?php
    /*
    * Template Name: User
    */
    ?>
    <?php get_header(); ?>
    <?php
    if (!is_user_logged_in()) {
        return;
    }
    global $post;
    $user_id = get_current_user_id();
    $bookmarks = get_user_meta($user_id, 'love_me_like', true);
    ?>
    <?php
    if (!empty($bookmarks)) {
        foreach($bookmarks as $bookmark) {
    
            $post = get_post(intval($bookmark['id']));
    
            if ($post == null || $post->post_status !== 'publish') {
                continue;
            }
            $post_id = $bookmark['id'];
    			$permalink = get_the_permalink( $post_id );
    			$title     = get_the_title( $post_id );
    		
            ?>
    
            <?php
            if (has_post_thumbnail($post_id)) { ?>
                <a href="<?php echo esc_url( $permalink ); ?>"
                title="<?php echo esc_attr( $title ); ?>" >
                    <?php echo get_the_post_thumbnail($post_id, array(75, 106)); ?>
                </a> <?php
            } ?>
    
            <?php
            if (!empty($title)) { ?>
                <a href="<?php echo esc_url( $permalink ); ?>"> <?php echo esc_attr($title); ?> </a>
                <?php
            } ?>
    
            <?php
        }
    } ?>
    <?php
    if (!empty($bookmarks)) { ?>
    
        <?php foreach($bookmarks as $bookmark_id) {
                $post_id = get_post_meta($bookmark_id, 'love_me_like', true);
              echo esc_attr( $title ); ?>
                <?php
            } ?>
    
            <?php
    } else { ?>
        nada
            <?php
    } ?>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
Visualizando 10 respostas - 1 até 10 (de um total de 10)
  • Moderador Felipe Elia

    (@felipeelia)

    Olá,

    Posso estar deixando de ver algo óbvio aqui, mas me parece que o Love Me não guarda um metadado do usuário. Por esse motivo, usar get_user_meta($user_id, 'love_me_like', true); não vai retornar nada mesmo.

    Olhando o código do plugin, parece que ele guarda por IP, portanto você vai precisar fazer uma WP_Query procurando por posts onde o metadado love_me_ips contenha $_SERVER['REMOTE_ADDR'].

    Não se esqueça de voltar caso tenha mais alguma dúvida ou, se for o caso, para marcar seu tópico como “resolvido”.

    Nura

    (@archer-master)

    Boa tarde @felipeelia, tentei fazer assim, mas sem retorno dos posts. Ainda estou um pouco confuso de onde colocar $_SERVER['REMOTE_ADDR'] no metadado.

    <?php
    /*
    * Template Name: User
    */
    ?>
    <?php get_header(); ?>
    <ul class="loved-post-user">
    <?php
    	$args = array(
    		'post_type' => 'series',
    	 'meta_query' => array(
           array(
                'key' => 'love_me_like',
                'value' => $_SERVER['REMOTE_ADDR'],
                'compare' => 'IN',
            )
        )	
    		
    	);
    	$user_fav = get_posts( $args );
    	foreach( $user_fav as $loved ) : ?>
    		<li class="loved-item">
    			<a href="<?php echo get_permalink($loved->ID); ?>"><?php echo get_the_title($loved->ID); ?></a><br/>
    		</li>
    	<?php endforeach; ?>
    </ul>
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Moderador Felipe Elia

    (@felipeelia)

    Tenta usar

    
    $args = array(
    	'post_type'  => 'series',
    	'meta_query' => array(
    		array(
    			'key'     => 'love_me_like',
    			'value'   => $_SERVER['REMOTE_ADDR'],
    			'compare' => 'LIKE',
    		),
    	),
    
    );
    $user_fav = get_posts( $args );
    

    Como o Love Me aparentemente guarda o array serializado, ou seja, como uma string normal, trocando o IN pelo LIKE deve fazer o WP montar a query certa.

    Nura

    (@archer-master)

    @felipeelia ainda não retorna nada.

    Moderador Felipe Elia

    (@felipeelia)

    Ah, agora que eu vi que você está usando love_me_like ao invés do love_me_ips como eu havia comentado antes. Faça mais essa troca e diga se teve algum resultado.

    Nura

    (@archer-master)

    Acabei de testar e agora retorna todos os posts do user 1 em todos os usuários
    cadastrados, quero retornar só os posts de um usuário X individualmente.

     <?php
    $args = array(
    	'post_type'  => 'series',
    	'posts_per_page' => 4,
            'order' => 'DESC',
    	'meta_query' => array(
    		array(
    			'key'     => 'love_me_ips',
    			'value'   => $_SERVER['REMOTE_ADDR'],
    			'compare' => 'LIKE',
    		),
    	),
    
    );
    
    $user_fav = new WP_Query( $args );
    if ( $user_fav->have_posts() ) {
    while ( $user_fav->have_posts() ) {
    $user_fav->the_post();
    ?>
      <li class="loved-item">
    <a href="<?php echo get_permalink($user_fav->ID); ?>"><?php echo get_the_title($user_fav->ID); ?></a><br/>
    		</li>
      
      <?php 
    }
    }
    // Restore original post data.
    wp_reset_postdata();
    ?>
    Moderador Felipe Elia

    (@felipeelia)

    Não passa os do user 1, passa os do usuário com o seu IP. O código não tem nada de ID de usuário.

    Dê uma olhada no conteúdo gravado no banco de dados para entender melhor. Para testar, você vai precisar simular outros IPs, mas olhar como isso está sendo salvo no BD vai facilitar bastante o entendimento.

    Nura

    (@archer-master)

    Pesquisei bastante e achei o que queria, essa função pega o ip do usuário.

    Função que pega o ip

    function hiwptut_get_ip() {
        if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) && ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) && ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = ( isset( $_SERVER['REMOTE_ADDR'] ) ) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
        }
        $ip = filter_var( $ip, FILTER_VALIDATE_IP );
        $ip = ( $ip === false ) ? '0.0.0.0' : $ip;
        return $ip;
    }
    $ip = hiwptut_get_ip();
    • Esta resposta foi modificada 3 months, 1 week atrás por  Nura.
    • Esta resposta foi modificada 3 months, 1 week atrás por  Nura.
    Moderador Felipe Elia

    (@felipeelia)

    Conseguiu resolver o problema então, @archer-master? Se sim, não esqueça de marcar o tópico como resolvido, por favor.

    Nura

    (@archer-master)

    Obrigado @felipeelia, era tão fácil resolver, mas acabei confundido as coisas. Marcado como resolvido!

Visualizando 10 respostas - 1 até 10 (de um total de 10)
  • Você deve estar conectado para responder a este tópico.