Монетизация блога — не обязательный, но достаточно весомый источник мотивации. Ведете ли вы блог в одиночку или с авторами, которых вы собрали, даже несколько долларов в месяц может изменить ваше (и их) отношение к блогу.
Поскольку Google AdSense — один из самых простых и популярных способов монетизации блога, мы рассмотрим, как его использовать в WordPress блоге с несколькими авторами (хотя это руководство также сработает для блоггеров-одиночек). Мы рассмотрим, как установить поля в профиле для авторской рекламы AdSense, как добавлять эту рекламу с помощью функции, виджета, шорткода и автоматически.
| Скачать исходники |
Разминка: установка полей профиля для авторской рекламы
Google допускает рекламу от нескольких AdSense аккаунтов на одном сайте, если только вы не отображаете рекламу от разных аккаунтов на одной странице. Так что мы будем отображать рекламу авторов на страницах их записей и отображать нашу собственную рекламу на остальных страницах.
Мы можем взять у каждого автора блога его блоки кода AdSense и вставить их вручную в код, но лучше просить их предоставить код и вставлять его динамически. Плюс не придется делать что-то вручную. Код ниже предоставляет нашим авторам возможность обновить их профили и вставить их рекламу AdSense.
<?php // show the textarea fields for authors' to enter their AdSense ad codes // source: http://www.stemlegal.com/greenhouse/2012/adding-custom-fields-to-user-profiles-in-wordpress/ function wptuts_profile_adsense_show( $user ) { echo '<h3>Your Google AdSense Ads</h3> <table class="form-table"> <tr> <th><label for="adsense_300x250">AdSense Ad Code (300x250)</label></th> <td><textarea name="adsense_300x250" id="adsense_300x250" rows="5" cols="30">' . get_user_meta( $user->ID, 'adsense_300x250', true) . '</textarea><br> <span class="adsense_300x250">Your Google AdSense JavaScript code for the 300x250 ad space.</span></td> </tr> <tr> <th><label for="adsense_468x60">AdSense Ad Code (468x60)</label></th> <td><textarea name="adsense_468x60" id="adsense_468x60" rows="5" cols="30">' . get_user_meta( $user->ID, 'adsense_468x60', true) . '</textarea><br> <span class="adsense_468x60">Your Google AdSense JavaScript code for the 468x60 ad space.</span></td> </tr> </table>'; } add_action( 'show_user_profile', 'wptuts_profile_adsense_show' ); add_action( 'edit_user_profile', 'wptuts_profile_adsense_show' ); // save the changes above function wptuts_profile_adsense_save( $user_id ) { if ( ! current_user_can( 'edit_user', $user_id ) ) return false; update_user_meta( $user_id, 'adsense_300x250', $_POST['adsense_300x250'] ); update_user_meta( $user_id, 'adsense_468x60', $_POST['adsense_468x60'] ); } add_action( 'personal_options_update', 'wptuts_profile_adsense_save' ); add_action( 'edit_user_profile_update', 'wptuts_profile_adsense_save' ); ?>
Вы можете размножить строки таблицы и добавить больше типов рекламы, если захотите. Только не забудьте изменить name и другие параметры.
Создаем основную функцию
Теперь мы переходим к созданию нашей основной функции, которая будет использоваться сама по себе, а также будет использована другими функциями. Вот код:
<?php // our main function to return the ad codes // remember: other functions below use this function, too! function wptuts_return_adsense( $ad_type = '468x60' ) { // the default ad codes - don't forget to change them! $default_ad_codes = array( '300x250' => '<img src="http://dummyimage.com/300x250" />', '468x60' => '<img src="http://dummyimage.com/480x60" />' ); if ( is_single() ) { global $post; $user_id = $post->post_author; $ad_code = get_user_meta( $user_id, 'adsense_' . $ad_type, true ); } else { $ad_code = $default_ad_codes[$ad_type]; } if ( $ad_code != '' ) { // we'll return the ad code within a div which has a class for the ad type, just in case return '<div class="adsense_' . $ad_type . '">' . $ad_code . '</div>'; } else { return false; } } ?>
Видите, что он делает?
- Сначала мы определяем некоторые коды рекламы по умолчанию, которые будут отображены на страницах без записей.
- Затем мы проверяем, является ли страница страницей одной записи.
- Если это страница одной записи, мы вытаскиваем код рекламы из профиля автора и присваиваем его переменной $ad_code. Обратите внимание, что мы также используем параметр $ad_type.
- Если это не страница одной записи, мы присваиваем переменной $ad_code наш код по умолчанию.
- Если переменная $ad_code не пустая, мы возвращаем код объявления в обрамлении div (иначе возвращаем false).
Готово! Вы можете использовать эту функцию где угодно в теме — и внутри, и вне цикла.
Мне нравится, когда все так просто!
Запомните: Google строго запрещает размещать рекламу от разных аккаунтов на одной странице. Потому основная функция (и, следовательно, остальные функции) не будут отображать код по умолчанию, если автор не предоставил свои коды в профиле. Если мы это сделаем, мы, скорее всего, будем забанены Google AdSense.
Создание шорткода
Если вы хотите дать авторам свободу в добавлении своей рекламы где угодно в записи, вы можете использовать шорткод такого плана:
<?php // shortcode for the above function // usage: [display_adsense ad_type="468x60"] function display_adsense_sc( $atts ) { extract( shortcode_atts( array( 'ad_type' => '468x60' ), $atts ) ); return wptuts_return_adsense( $ad_type ); } add_shortcode( 'display_adsense', 'display_adsense_sc' ); ?>
Это даже проще, чем основная функция: он берет параметр ad_type, передает его нашей основной функции и возвращает результат.
Если вы не хотите использовать параметры и просто возвращать основную функцию, вам даже не нужен код, представленный выше. Просто добавьте эту строку после основной функции:
<?php // usage: [display_adsense] add_shortcode( 'display_adsense', 'wptuts_return_adsense' ); ?>
Единственный параметр нашей основной функции имеет значение по умолчанию (в нашем примере это '468x60'), так что шорткод будет отображать только такую рекламу.
Автоматическая вставка рекламы после "n"-го абзаца
Возможно, вы не захотите давать своим авторам свободу размещения рекламы. Если вы решите вставлять вашу рекламу автоматически, например, после первого абзаца каждой записи, вам нужна вот эта функция:
<?php // the function to insert the ads automatically after the "n"th paragraph in a post // the following code is borrowed from Internoetics, then edited: // http://www.internoetics.com/2010/02/08/adsense-code-within-content/ function wptuts_auto_insert_adsense( $post_content ) { if ( !is_single() ) return $post_content; $afterParagraph = 1; // display after the "n"th paragraph $adsense = wptuts_return_adsense( '468x60' ); preg_match_all( '/</p>/', $post_content, $matches, PREG_OFFSET_CAPTURE ); $insert_at = $matches[0][$afterParagraph - 1][1]; return substr( $post_content, 0, $insert_at) . $adsense . substr( $post_content, $insert_at, strlen( $post_content ) ); } add_filter( 'the_content', 'wptuts_auto_insert_adsense' ); ?>
Если вы хотите скачать плагин, который мы сейчас создаем, не забудьте, что строка с функцией add_filter() будет закомментирована. Раскомментируйте ее, чтобы включить в работу.
Создание виджета AdSense
Создание виджетов может показаться нелегкой задачей, но на самом деле создавать их достаточно просто. В нашем случае мы просто делаем вывод нашей основной функции и позволяем администраторам вашего блога устанавливать для него параметр по умолчанию:
<?php // the widget to display the ads on the sidebar class Wptuts_AdSense_Widget extends WP_Widget { public function __construct() { parent::__construct( 'wptuts_adsense_widget', // base ID of the widget 'Wptuts+ AdSense Widget', // the name of the widget array( 'description' => 'Wptuts+ AdSense Widget Settings' ) // the description for the widget ); } public function form( $instance ) { if ( isset( $instance[ 'ad_type' ] ) ) { $ad_type = $instance[ 'ad_type' ]; } else { $ad_type = '300x250'; } ?> <p> <label for="<?php echo $this->get_field_id( 'ad_type' ); ?>">Ad Type</label> <input class="widefat" id="<?php echo $this->get_field_id( 'ad_type' ); ?>" name="<?php echo $this->get_field_name( 'ad_type' ); ?>" type="text" value="<?php echo esc_attr( $ad_type ); ?>" /> </p> <?php } public function update( $new_instance, $old_instance ) { $instance = array(); $instance[ 'ad_type' ] = strip_tags( $new_instance[ 'ad_type' ] ); return $instance; } public function widget( $args, $instance ) { echo wptuts_return_adsense( $instance[ 'ad_type' ] ); } } function myplugin_register_widgets() { register_widget( 'Wptuts_AdSense_Widget' ); } add_action( 'widgets_init', 'myplugin_register_widgets' ); ?>
У виджета также очень простая функция: если это страница одной записи — отображать рекламу автора, если нет — отображать стандартную рекламу.
Заключение
Если у вас блог с несколькими авторами без оплаты их работы, эти штуки могут мотивировать их писать чаще. Они могут даже больше рекламировать и делиться своими записями — в конце концов, на страницах будет отображаться их собственная реклама. Это умно и хорошо.
Есть идеи монетизации блога с несколькими авторами? Поделитесь в комментариях!
Комментарии к записи: 0