Статьи

Как разработать простой плагин для блокировки контента с помощью WordPress

Хотя некоторые считают обмен одним из основных принципов Интернета, бывают случаи, когда мы хотим поделиться какой-то информацией только с определенной группой людей.

Эта информация, назовем ее «премиум-контент» для любых целей и целей, будет передаваться только тем пользователям, которые нам что-то дают.   в ответ. Это «что-то» может быть адресом электронной почты, пожертвованием PayPal или просто сообщением в Facebook.

В этом уроке я объясню, как создать плагин для блокировки контента, который с помощью простого шорткода позволит нам выбрать, какой контент мы хотим сделать премиальным.

Мы рассмотрим два примера:

  1. Однажды примером будет простой шорткод, который позволит нам отображать контент пользователям, которые зарегистрированы на сайте.
  2. Другой шорткод потребует, чтобы пользователь сообщал URL контента на Facebook, чтобы прочитать остальную часть контента.

В WordPress Social Invitations мы используем очень похожий блокировщик контента, который показывает контент только тем пользователям, которые пригласили своих друзей.

Примечание . Вместо добавления кода в файл функций темы и / или таблицу стилей, я рекомендую создать плагин для добавления его на ваш сайт. Этот метод хранит все в одном месте и позволяет использовать шорткод на любом другом сайте.

Для завершения этого урока вам понадобится:

  • сайт с установленным WordPress
  • редактор кода
  • по желанию, программа FTP для загрузки вашего плагина

Начните с открытия нового файла в текстовом редакторе и присвоения ему имени. В примерах, которые мы рассмотрим в этой статье, вы увидите, что я назвал мой wptuts-content-locker.php но вы можете называть свой как угодно.

В файле вставьте следующий код:

01
02
03
04
05
06
07
08
09
10
<?php
/*
Plugin Name: Tuts+ Content Locker Shortcode
Plugin URI: http://wp.timersys.com
Description: This plugin provides a shortcode that let you hide premium content to users until they log in or share with facebook
Version: 1.0
Author: Damian Logghe
Author URI: http://timersys.com
License: GPLv2
*/

Это устанавливает ваш плагин и сообщает WordPress его имя и версию.

Ниже вступительного комментария нам нужно добавить функцию, которая создаст шорткод, и подключить его к add_shortcode действия add_shortcode :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// register the shortcode that accepts one parameter
add_shortcode ( ‘premium-content’, ‘wptuts_content_locker’ );
  
// shortcode function
function wptuts_content_locker( $atts, $content ) {
 
    extract( shortcode_atts( array (
        ‘method’ => »
    ), $atts ) );
     
    global $post;
     
    // if the method is not ‘facebook’, then we check for logged user
    if ( ‘facebook’ != $method ) {
     
        if ( is_user_logged_in() ) {
         
            // We return the content
            return do_shortcode($content);
             
        } else {
         
            // We return a login link that will redirect to this post after user is logged
            return ‘<div class=»wptuts-content-locker»>You need to <a href=»‘ . wp_login_url( get_permalink( $post->ID ) ) . ‘»>Log in</a> to see this content</div>’;
             
        }
         
    // We are using the facebook method
    } else {
         
        // Check if we have a cookie already set for this post
        if ( isset( $_COOKIE[‘wptuts-lock’][$post->ID] ) ) {
         
            // We return the content
            return do_shortcode( $content );
         
        // We ask the user to like post to see content
        } else {
             
            return'<div id=»fb-root»></div><div class=»wptuts-content-locker»>Please share this post to see the content <div class=»fb-like» data-href=»‘ . get_permalink( $post->ID ) . ‘» data-layout=»button_count» data-action=»like» data-show-faces=»false» data-share=»false»></div></div>’;
         
        }
         
    }
     
}

Теперь мы можем использовать наш шорткод так:

[premium-content method=""]Premium content goes here[/premium-content]

Но ждать! Давайте подробно рассмотрим код выше.

Как видите, наш шорткод принимает один аргумент, который разделит наш код на два раздела. Этот аргумент, который я назвал «метод», проводит различие между использованием подхода «Мне нравится в Facebook» или «простого входа в систему».

Оба метода похожи по логике, как вы можете видеть на следующем рисунке:

Если пользователь не вошел в систему, мы показываем ссылку для входа в систему с wp_login_url функции wp_login_url а также передаем URL-адрес записи / страницы. Таким образом, после того, как пользователь войдет в систему, он будет перенаправлен обратно на пост.

Метод Facebook немного сложнее и включает в себя использование файлов cookie . Мы используем их для хранения идентификатора поста, чтобы узнать, какими постами поделился пользователь, а какие нет.

Нам также нужен JavaScript, который будет обрабатывать создание файлов cookie и обратный вызов Facebook. Давайте создадим файл с именем script.js и вставим следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function createCookie( name, value, days ) {
  
    var expires;
  
    if ( days ) {
     
        var date = new Date();
        date.setTime( date.getTime() + (days * 24 * 60 * 60 * 1000) );
        expires = «; expires=» + date.toGMTString();
         
    } else {
        expires = «»;
    }
     
    document.cookie = escape( name ) + «=» + escape( value ) + expires + «; path=/»;
     
}
 
(function( $ ) {
 
    $(function() {
 
        FB.Event.subscribe( ‘edge.create’, function( href ) {
            createCookie(‘wptuts-lock[‘ + wptuts_content_locker.ID + ‘]’, true, 9999 );
            location.reload();
        });
         
    });
     
}( jQuery ));

В этом сценарии мы собираемся присоединить функцию обратного вызова к edge.create event FB edge.create event . В частности, эта функция создаст куки, которые мы используем в нашем основном скрипте, чтобы проверить, поделился ли пользователь постом. Как только файл cookie создан, скрипт перезагрузит страницу, чтобы отобразить премиум-контент.

Теперь нам нужно добавить наш скрипт-файл в плагин, но давайте сначала создадим очень простой CSS-файл для стилизации нашего плагина.

Создайте файл с именем style.css и добавьте следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
/* Stylesheet for Tuts+ Content Locker Shortcode */
.wptuts-content-locker {
    width: 80%;
    display: block;
    border: 3px dashed #ccc;
    padding: 20px;
    text-align: center;
    margin: 20px auto
}
.wptuts-content-locker div.fb-like.fb_iframe_widget {
    overflow: hidden;
}

Теперь давайте зарегистрируем наши скрипты в wp_enqueue_scripts :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
// Register stylesheet and javascript with hook ‘wp_enqueue_scripts’, which can be used for front end CSS and JavaScript
add_action( ‘wp_enqueue_scripts’, ‘wptuts_content_locker_scripts’ );
  
//function that enqueue script only if shortcode is used
function wptuts_content_locker_scripts() {
 
    global $post;
    wp_register_style( ‘wptuts_content_locker_style’, plugins_url( ‘style.css’, __FILE__ ) );
    wp_register_script( ‘wptuts_content_locker_js’, plugins_url( ‘script.js’, __FILE__ ), array( ‘jquery’ ), », true );
     
    if( has_shortcode( $post->post_content, ‘premium-content’ ) ) {
     
        wp_enqueue_style( ‘wptuts_content_locker_style’ );
        wp_enqueue_script( ‘wptuts_content_locker_js-fb’, ‘http://connect.facebook.net/en_US/all.js#xfbml=1’, array( ‘jquery’ ),»,FALSE );
        wp_enqueue_script( ‘wptuts_content_locker_js’ );
        wp_localize_script( ‘wptuts_content_locker_js’, ‘wptuts_content_locker’, array( ‘ID’=> $post->ID ) );
         
    }
     
}

Обратите внимание, что мы используем функцию has_shortcode . Таким образом, мы собираемся включать файлы JavaScript и CSS только при необходимости, а не на каждую страницу нашего сайта.

Мы также используем функцию localize_script для правильной передачи идентификатора записи в файл JavaScript.

Примерно в 120 строках кода мы создали простой, но очень полезный плагин для блокировки контента. Это было легко, правда?

Прелесть этого плагина в том, что вы можете настроить его для работы с любым способом, который вы можете придумать Например, вместо того, как в Facebook, вы можете попросить пользователей сообщить в Твиттере о вашем сайте, добавить ссылку для пожертвования PayPal или что-либо еще, что вы можете изобразить.

Вы можете получить код из GitHub или попробовать демо .