Suporte » Desenvolvendo com WordPress » Marcar e desmarcar post favorito

  • Resolvido Nura

    (@archer-master)


    Boa noite, tenho um código que serve pra favoritar o post, gostaria que ele contasse apenas o primeiro clique e se clicasse novamente desmarcava a opção e não adicionasse mais +1.

    Functions.php

    add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );
    function ajax_test_enqueue_scripts() {
    	if( is_single() ) {
    		wp_enqueue_style( 'love', plugins_url( '/love.css', __FILE__ ) );
    	}
    
    	wp_enqueue_script( 'love', plugins_url( '/love.js', __FILE__ ), array('jquery'), '1.0', true );
    
    	wp_localize_script( 'love', 'postlove', array(
    		'ajax_url' => admin_url( 'admin-ajax.php' )
    	));
    
    }
    
    add_filter( 'the_content', 'post_love_display', 99 );
    function post_love_display( $content ) {
    	$love_text = '';
    
    	if ( is_single() ) {
    		
    		$love = get_post_meta( get_the_ID(), 'post_love', true );
    		$love = ( empty( $love ) ) ? 0 : $love;
    
    		$love_text = '<p class="love-received"><a class="love-button" href="' . admin_url( 'admin-ajax.php?action=post_love_add_love&post_id=' . get_the_ID() ) . '" data-id="' . get_the_ID() . '">give love</a><span id="love-count">' . $love . '</span></p>'; 
    	
    	}
    
    	return $content . $love_text;
    
    }
    
    add_action( 'wp_ajax_nopriv_post_love_add_love', 'post_love_add_love' );
    add_action( 'wp_ajax_post_love_add_love', 'post_love_add_love' );
    
    function post_love_add_love() {
    	$love = get_post_meta( $_REQUEST['post_id'], 'post_love', true );
    	$love++;
    	update_post_meta( $_REQUEST['post_id'], 'post_love', $love );
    	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { 
    		echo $love;
    		die();
    	}
    	else {
    		wp_redirect( get_permalink( $_REQUEST['post_id'] ) );
    		exit();
    	}
    }

    love.js

    
    jQuery( document ).on( 'click', '.love-button', function() {
    	var post_id = jQuery(this).data('id');
    	jQuery.ajax({
    		url : postlove.ajax_url,
    		type : 'post',
    		data : {
    			action : 'post_love_add_love',
    			post_id : post_id
    		},
    		success : function( response ) {
    			jQuery('#love-count').html( response );
    		}
    	});
    
    	return false;
    })

    love.css

    .entry-content .love-button {
    	background: #f14864;
    	color: #fff;
    	padding:11px 22px;
    	display:inline-block;
    	border:0px;
    	text-decoration: none;
        box-shadow: 0px 6px #d2234c;
        position:relative;
    }
    
    .entry-content .love-button:hover{
    	top:3px;
        box-shadow: 0px 3px #d2234c;
    }
    
    .entry-content .love-button:active{
    	top:6px;
        box-shadow: none;
    }
    
    #love-count {
    	background: #eee;
        box-shadow: 0px 6px #ddd;	
    	color: #666;
    	padding:11px 22px;
    	display:inline-block;
    }
Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Moderador Felipe Elia

    (@felipeelia)

    Olá,

    Quando você diz: “contasse apenas o primeiro clique e se clicasse novamente desmarcava a opção”, parece que você quer fazer algo baseado nas ações dos usuários, certo?

    Você vai precisar guardar qual usuário favoritou qual post seja através de um cookie ou de um metadado (no caso de usuários logados). Este plugin parece fazer exatamente o que você quer, olhar seu código-fonte pode dar algumas ideias: https://wordpress.org/plugins/wti-like-post/

    Nura

    (@archer-master)

    Boa tarde @felipeelia , achei o plugin que queria ‘WP Favorite Posts“, muito obrigado pela ajuda.

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