News Feed Follow, Subscribe User ( ok)
https://github.com/iantsch/mbtNewsFeed
Ví dụ 1: Sử dụng trên theme (ok)
C:\xampp\htdocs\style2\wp-content\themes\gutener\functions.php
// follow
function mbt_news_feed_init() {
if(array_key_exists('action', $_REQUEST) && in_array($_REQUEST['action'], mbt_news_feed_valid_actions())) {
do_action( 'wp_ajax_' . $_REQUEST['action'] );
}
}
function mbt_news_feed_pre_get_posts($query) {
if (is_user_logged_in()) {
if ( $query->is_main_query() && $query->is_home() && !is_admin()) {
$current_user = wp_get_current_user();
$followers = get_user_meta( $current_user->data->ID, 'following', true);
if (is_array($followers) && !empty($followers)) {
$followers = array_keys($followers);
$followers[] = $current_user->data->ID;
$query->set('author__in', $followers);
}
}
}
return $query;
}
function mbt_news_feed_is_following($user_id) {
$user_id_current = get_current_user_id();
$followers = get_user_meta( $user_id_current, 'following', true);
if (empty($followers)) {
return false;
}
if (array_key_exists($user_id, $followers)) {
return true;
}
return false;
}
function mbt_news_feed_helper_check_data() {
if(!wp_verify_nonce( $_POST['security'], 'file_upload' )) {
die(-1);
}
if (!array_key_exists('user_id', $_POST)) {
die(-1);
}
$user_id = absint($_POST['user_id']);
if ($user_id < 1) {
die(-1);
}
return $user_id;
}
function mbt_following() {
$user_id = mbt_news_feed_helper_check_data();
$current_user_id = get_current_user_id();
$followers = get_user_meta( $current_user_id, 'following', true);
if (!is_array($followers)){
$followers = array();
}
$followers[$user_id] = $current_user_id;
update_user_meta( $current_user_id, 'following', $followers );
echo mbt_news_feed_button($user_id, false);
exit;
}
function mbt_follow() {
$user_id = mbt_news_feed_helper_check_data();
$current_user_id = get_current_user_id();
$followers = get_user_meta( $current_user_id, 'following', true);
if (is_array($followers) && !empty($followers)){
unset($followers[$user_id]);
} else {
$followers = array();
}
update_user_meta( $current_user_id, 'following', $followers );
echo mbt_news_feed_button($user_id, true);
exit;
}
function mbt_news_feed_button($user_id, $follow=true) {
$label = __('Follow','newsfeed');
$class = 'follow';
if (false === $follow) {
$class = 'following';
$label = __('Following','newsfeed');
}
return "<a href='#' class='button {$class}' data-user_id='{$user_id}'>{$label}</a>";
}
function mbt_news_feed_valid_actions() {
return array(
'mbt_following',
'mbt_follow',
);
}
function mbt_news_feed_wp_footer() {
if (is_user_logged_in()) {
$render_button = false;
$user_id = 0;
if (is_singular()) {
$render_button = true;
$post_id = get_queried_object_id();
$user_id = get_post_field( 'post_author', $post_id );
}
if (is_author()) {
$render_button = true;
$user_id = get_queried_object_id();
}
if (true === $render_button && $user_id > 0) {
$follow = mbt_news_feed_is_following($user_id );
echo "<div id='mbt-news-feed'>";
echo mbt_news_feed_button($user_id, !$follow);
echo "</div>";
}
}
}
if (is_admin()){
foreach (mbt_news_feed_valid_actions() as $action) {
add_action('wp_ajax_'.$action, $action);
}
}
add_action( 'init', 'mbt_news_feed_init');
add_action( 'pre_get_posts', 'mbt_news_feed_pre_get_posts');
add_action( 'wp_footer', 'mbt_news_feed_wp_footer');
C:\xampp\htdocs\style2\wp-content\themes\gutener\assets\js\newsfeed.js
jQuery(document).ready(function($) {
$('body').on('click', '#mbt-news-feed .following, #mbt-news-feed .follow', function(e) {
e.preventDefault();
var $me = $(this);
if ($me.hasClass('follow')) {
console.log('follow');
var action = 'mbt_following';
$me.removeClass('follow');
$me.addClass('following');
}else {
console.log('following');
var action = 'mbt_follow';
$me.addClass('follow');
$me.removeClass('following');
}
var data = $.extend(true, $me.data(), {
action: action,
security: fiuajax.security
});
$.post(fiuajax.ajaxurl, data, function(response) {
if (response == '0' || response == '-1') {} else {
$($me).parent().empty().html(response);
}
});
});
});
C:\xampp\htdocs\style2\wp-content\themes\gutener\assets\css\newsfeed.css
#mbt-news-feed {
display: block;
position: fixed;
bottom: 20px;
bottom: 3.125vw;
right: 20px;
right: 3.125vw;
}
#mbt-news-feed a.button{
display: block;
border-radius: 2px;
border-radius: 0.625vw;
padding: 5px 10px;
padding: 1.5625vw 3.125vw;
color: #fff;
background-color: #333;
background-color: rgba(51,51,51,.8);
opacity: .5;
}
#mbt-news-feed a.button:hover{
opacity: 1;
}
Ví dụ 2: Sử dụng trên plugin
C:\xampp\htdocs\hanam\wp-content\plugins\mbtNewsFeed\newsfeed.php
<?php
/**
* mbtNewsFeed for purists
*
* @package mbtNewsFeed
* @author iantsch
* @copyright 2016 mbt.wien
* @license GPL-2.0+
*
* @wordpress-plugin
* Plugin Name: mbtNewsFeed
* Plugin URI: http://wordpress.stackexchange.com/questions/41934/
* Description: If you are logged in and follow some authors, the home feed will only show their posts.
* Version: 1.0.1
* Author: iantsch
* Author URI: http://mbt.wien
* Text Domain: newsfeed
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-3.0.txt
*/
function mbt_news_feed_init() {
if(array_key_exists('action', $_REQUEST) && in_array($_REQUEST['action'], mbt_news_feed_valid_actions())) {
do_action( 'wp_ajax_' . $_REQUEST['action'] );
}
}
function mbt_news_feed_pre_get_posts($query) {
if (is_user_logged_in()) {
if ( $query->is_main_query() && $query->is_home() && !is_admin()) {
$current_user = wp_get_current_user();
$followers = get_user_meta( $current_user->data->ID, 'following', true);
if (is_array($followers) && !empty($followers)) {
$followers = array_keys($followers);
$followers[] = $current_user->data-->ID;
$query->set('author__in', $followers);
}
}
}
return $query;
}
function mbt_news_feed_is_following($user_id) {
$followers = get_user_meta( $user_id, 'following', true);
if (empty($followers)) {
return false;
}
if (array_key_exists($user_id, $followers) && $followers[$user_id]) {
return true;
}
return false;
}
function mbt_news_feed_helper_check_data() {
if(!wp_verify_nonce( $_POST['_ajax_nonce'], 'mbtNewsFeed' )) {
die(-1);
}
if (!array_key_exists('user_id', $_POST)) {
die(-1);
}
$user_id = absint($_POST['user_id']);
if ($user_id < 1) {
die(-1);
}
return $user_id;
}
function mbt_follow() {
$user_id = mbt_news_feed_helper_check_data();
$current_user = wp_get_current_user();
$followers = get_user_meta( $current_user->data->ID, 'following', true);
if (!is_array($followers)){
$followers = array();
}
$followers[$user_id] = 1;
update_user_meta( $current_user->data->ID, 'following', $followers );
echo mbt_news_feed_button($user_id, false);
exit;
}
function mbt_unfollow() {
$user_id = mbt_news_feed_helper_check_data();
$current_user = wp_get_current_user();
$followers = get_user_meta( $current_user->data->ID, 'following', true);
if (is_array($followers) && !empty($followers)){
unset($followers[$user_id]);
} else {
$followers = array();
}
update_user_meta( $current_user->data->ID, 'following', $followers );
$followers = get_user_meta( $current_user->data->ID, 'following', true);
echo mbt_news_feed_button($user_id, true);
exit;
}
function mbt_news_feed_button($user_id, $follow=true) {
$class = 'unfollow';
$label = __('Unfollow','newsfeed');
if (true === $follow) {
$class = 'follow';
$label = __('Follow','newsfeed');
}
return "<a href='#mbt-news-feed' class='button {$class}' data-user_id='{$user_id}'>{$label}</a>";
}
function mbt_news_feed_valid_actions() {
return array(
'mbt_follow',
'mbt_unfollow',
);
}
function mbt_news_feed_enqueue_scripts() {
if (is_user_logged_in()) {
wp_enqueue_script('jquery');
wp_localize_script('jquery', 'admin_ajax', array(
'url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('mbtNewsFeed'),
));
wp_enqueue_script( 'mbt-news-feed', plugins_url('newsfeed.js', __FILE__), array('jquery'), NULL, true);
wp_enqueue_style( 'mbt-news-feed-css', plugins_url('newsfeed.css', __FILE__) );
}
}
function mbt_news_feed_wp_footer() {
if (is_user_logged_in()) {
$render_button = false;
$user_id = 0;
if (is_singular()) {
$render_button = true;
$post_id = get_queried_object_id();
$user_id = get_post_field( 'post_author', $post_id );
}
if (is_author()) {
$render_button = true;
$user_id = get_queried_object_id();
}
if (true === $render_button && $user_id > 0) {
$follow = mbt_news_feed_is_following($user_id);
echo "<div id='mbt-news-feed'>";
echo mbt_news_feed_button($user_id, !$follow);
echo "</div>";
}
}
}
if (is_admin()){
foreach (mbt_news_feed_valid_actions() as $action) {
add_action('wp_ajax_'.$action, $action);
}
}
add_action( 'init', 'mbt_news_feed_init');
add_action( 'wp_enqueue_scripts', 'mbt_news_feed_enqueue_scripts');
add_action( 'pre_get_posts', 'mbt_news_feed_pre_get_posts');
add_action( 'wp_footer', 'mbt_news_feed_wp_footer');
C:\xampp\htdocs\hanam\wp-content\plugins\mbtNewsFeed\newsfeed.js
jQuery(document).ready(function($) {
$('body').on('click', '#mbt-news-feed .follow, #mbt-news-feed .unfollow', function(e) {
e.preventDefault();
var $me = $(this),
action = 'mbt_follow';
if ($me.hasClass('unfollow')) action = 'mbt_unfollow';
var data = $.extend(true, $me.data(), {
action: action,
_ajax_nonce: admin_ajax.nonce
});
$.post(admin_ajax.url, data, function(response) {
if(response == '0' || response == '-1'){
} else {
$($me).parent().empty().html(response);
}
});
});
});
C:\xampp\htdocs\hanam\wp-content\plugins\mbtNewsFeed\newsfeed.css
#mbt-news-feed {
display: block;
position: fixed;
bottom: 20px;
bottom: 3.125vw;
right: 20px;
right: 3.125vw;
}
#mbt-news-feed a.button{
display: block;
border-radius: 2px;
border-radius: 0.625vw;
padding: 5px 10px;
padding: 1.5625vw 3.125vw;
color: #fff;
background-color: #333;
background-color: rgba(51,51,51,.8);
opacity: .5;
}
#mbt-news-feed a.button:hover{
opacity: 1;
}
PreviousWooCommerce Combo Offers (ok)Nextget post field get_post_field Retrieve data from a post field based on Post ID (ok)
Last updated
Was this helpful?