Easily calculate and handle authors’ pay on a multi-author blog. Set up payment criteria and let the plugin compute posts payment. Stats are immediately viewable. Both a general view with all users and a specific one for each author are available. It can easily help you implement a revenue sharing/paid to write model for your business.
- Pay per post, word, visit (tutorial), image and comment (not mutually exclusive).
- Pay with an incremental system (eg. each word is €0.01 => 100 words = €1) or with a zonal one (eg. from 200 to 300 words/visits it’s €2.00, up to 10 zones).
- No account needed. Data is yours, no need to sign-up to anything really.
- Old stats availability. View posts countings since the first written post, disregarding the plugin install date. A fancy date picker lets you shift between days and select the desired range, or pick a ready choice (such as This month, Last month…).
- Responsive and sortable stats: optimized stats page for mobile devices and sortable stats table.
- Personalize user’s settings, so that special settings only apply to a particular user. Different settings can be made apparent in the stats or hidden depending on your needs.
- Customizable permissions to prevent your users to see stats and use functions they are not supposed to.
- Extend with your own custom implementation through hooks, filters and special API features (learn more).
- And… works with custom post types, narrow your payments only to chosen user groups, supports pagination, and even more!
GitHub repository (wanna join us coding?)
Payment management, more visits tracking methods, and pay with PayPal
The PRO version includes integration with Google Analytics, Matomo Analytics, Plausible Analytics, Adsense Revenues sharing, payments management and PayPal payments. Among other stuff, it also allows to keep a convenient log of past payments and to display stats in public pages through a shortcode.
Integrate with Facebook
The Facebook addon allows to pay posts for the Facebook shares and comments they receive.
Browse all extensions.
Post Pay Counter is available in:
- French (Alexandre Mark)
- German (Julian Beck)
- Dutch (Elza van Swieten)
- Italian (Stefano Ottolenghi)
- Portoguese (Marco Dantas)
- Turkish (A. Bilgen)
- Czech (Jiří Kučera)
- Russian (Azat Seyitmuhammedov)
If you want to translate it in your own language and get a discount on the PRO version, contact us!
- Upload the directory of the Post Pay Counter in your wp-content/plugins directory; note that you need the whole folder, not only the single files.
- Activate the plugin through the “Activate” button in the “Plugins” page of your WordPress.
- Head to the configuration page first. The plugin already comes with a predefined set of settings, but you may want to set it up to better suit your needs.
- That’s it, you are done! You can now check the stats page to browse all the countings.
You said I could pay per visit. How do I do that?
There’s a tutorial about that. However, note that Post Pay Counter does not keep track of visits itself, and requires an external visits tracking system to be active. PPC supports a number of popular analytics services.
That is probably due to a permissions manager plugin active on your site. Check that capabilities post_pay_counter_access_stats and post_pay_counter_manage_options are correctly assigned and working.
Can I pay for BBPress contents?
Yes! In Post Pay Counter > Options > Miscellanea > Allowed post types, make sure you have Topic and Reply ticked, and those types of contents will be included in countings.
You can have a look at the apt tutorial for more details.
I don’t want errors to be logged
Set to false the constant PPC_DEBUG_LOG in post-pay-counter.php, it is located at line 44.
From this: define( ‘PPC_DEBUG_LOG’, true );
It must become: define( ‘PPC_DEBUG_LOG’, false );
Contributors & Developers
“Post Pay Counter” is open source software. The following people have contributed to this plugin.Contributors
“Post Pay Counter” has been translated into 4 locales. Thank you to the translators for their contributions.
Translate “Post Pay Counter” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
- New: easy visits trackers selection. Old callback/postmeta settings will be migrated automatically.
- New: support for Active Analytics visits plugin.
- Fix: potential error in plugins error log box.
- Fix: ensure log file exists before opening it.
- Fix: settings saving for PRO version 1.9.
- Fix: regression.
- Improv: performance! Reduce memory usage, loading time, and cache snapshots size (by dropping post_content from output).
- Improv: use PHP native word counting function instead of slower legacy method. New installs get this by default, otherwise you have to enable it in words payment settings.
- Improv: performance of visits payment (a PRO update will make Analytics more efficient).
- Improv: use stats cache snapshots by default, and use parameter to deactivate that.
- Improv: make cache snapshots applicable to as many users as possible.
- Fix: stop logging
- Fix: properly exit if user visits another user’s stats page without appropriate permissions.
- Fix: possible concatenation issue in
- Fix: auto select
Customin stats date picker when appropriate.
- Fix: hide visits counting method in user settings (only general).
- Various minor fixes and improvements, especially performance-wise.
- Tweak: support for settings overriding in payment computation – this mostly addresses an issue with the Publisher Bonus addon, see here for details https://postpaycounter.com/fixed-a-publisher-bonus-issue-with-complicated-settings-setups/.
- Tweak: support for settings priority tweaking (see https://postpaycounter.com/define-settings-priority/ ).
- Fixed: error with PHP 8 when filtering per post type in post edit page.
- Fixed: issue with Publisher Bonus (and potentially other author payment criteria) where stats would not be computed if no posts were to be displayed (but some author had author payments).
- Fixed: welcome page PHP fatal error.
- Fixed: changelog page PHP notice.
- Tweak: improved addons update mechanism.
- Fix: no users showing up if nobody had posts to be displayed (although Display all users was enabled).
- New: polish locale.
- Fix: farthest starting date in stats would sometimes not correspond to first published post.
- Fix: stats could show empty even if there were posts to show in the selected time range.
- Fix: some sanitization of parameters.
- Fix: user role selection not working in stats.
- Fix layout glitch with right-to-left locales.
- Tweak: moving error log from database to file.
- Feature: allow to exclude figure captions from word count.
- Fix: word count would not get immediately updated if post cache was enabled and post was edited.
- Fixed: excluding from words count blockquote and pre tags would not work if tag had some html attributes.
- Fixed: debug data shown on stats page.
- New: turkish locale.
- Fixed: fatal in welcome page.
- Fixed: unlocalized string “Displayed data is cached. …”.
- Tweak: consistency with page names when custom menu name is set.
- Fix: prevent all users from showing up if “Display all users” is ticked but user has no permission to see other people’s stats.
- Feature: allow to cache full stats table through WP-CLI, see our tutorial.
- Feature: ability to show all users in stats regardless of whether they have published posts in given time range.
- Feature: only pay for a percentage of total visits.
- New: added Russian locale (thanks to Azat Seyitmuhammedov!).
- New: allow pagination parameters in HTML frontend stats (mostly useful for PRO users).
- New: added more columns for sorting stats.
- New: new default time range option “Starting from given day”.
- Fix: localization for payment labels in overall stats.
- Tweak: stats start time is at 00:00:00 instead of 00:00:01.
- Tweak: minor improvements.
- Fix: WP-CLI tets code breaking WP-CLI setups.
- Feature: ability to apply shortcodes before word count.
- Tweak: added post ID to word count filter.
- Feature: allow to exclude text in pre tags from word counting.
- Tweak: added custom icon to admin menu entry.
- Tweak: improved layout in options page.
- Tweak: updated localizations.
- Feature: added global thresholds for counting types. You can set a threshold (for visits, for example) so that unless that threshold is met, the post does not earn any money at all, even from other payment criteria.
- Tweak: translation updates.
- Feature: added Spanish translation (thanks to Alexey).
- Tweak: added params to filter ppc_get_post_payment.
- Feature: allow to hide the Total payment column.
- Tweak: allow post status to be localized.
- Tweak: user choice dropdown in stats page now lists by display_name (which is consistent with other stats features) rather than nicename.
- Fix: PHP warning in function get_cal_days_in_month being called with 0 instead of 12, happening with “Last Month” stats.
- Fix: removed deprecated
- Fix: slight issue with word counting and punctuation (for ex. “Hello world . ” being counted as 3 words.)
- Fix: removed legacy code that would explicitly grant all permissions to admin user on install.
- Tweak: added info in tooltip for Stats caching option.
- Tweak: updated IT locale.
- Fix: allow to have more than 10 zones.
- New: addon Referral Visits
- Tweak: minor improvements (needed for addons compatibility).
- Tweak: autoupdate (for addons) checks for updates every 6 hours.
- Fixed: tooltip payment amounts formatting issue.
- Tweak: don’t allow settings saving if no user roles allowed to access options are selected.
- Fixed: if settings break, it was impossible to import settings.
- Fixed: get_settings() works with non logged-in users as well.
- Tweak: changes to produce_stats() function and author counting types call_user_func.
- Fixed: more meaningful error when license activation fails (not a PPCP_License object)
- Fixed: removed old stylesheet interfering with current one.
- Tweak: language updates.
- Fixed: possible display issue with Total payment, showin as zero. This was just a display issue: stats and payments always recorded correct amounts.
- Fixed: proper escaping of post title and author name in stats page.
- Tweak: under the hood improvements/changes to stats processing (compatibility with Pulisher Bonus latest release).
- Tweak: improved error handling.
- Fixed: minor security vulnerability (PHP Object Injection) in Import Settings feature (thanks Plugin Vulnerabilities).
- Fixed: minor security vulnerability in update settings function, which didn’t check for permissions (but did had nonce check).
- Fixed: changing Default time range setting could lead to settings loss.
- Tweak: improved stats processing flow.
- Tweak: removed caching for counting types as it would not respect user permissions.
- New: allow stats sorting per Written posts column.
- Tweak: overall stats conform with stats display settings, shows counts and/or payments accordingly.
- Fixed: counting settings could not be saved if the visits payment callback value had an invalid callback, even if that method was inactive.
- Fixed: preventing error log from exceeding 10MB in size.
- Fixed: sounder delete of 30-days old errors from log.
- Fixed: possible fatal error on activation.
- Tweak: clearing all posts stats cache on update and settings update.
- Fixed: issue with stats remember order feature.
- Feature: stats will always display ordered by the column you picked the last time. Can be disabled.
- Feature: possible to change how many digits payment figures are rounded to.
- Tweak: added notice on top of stats table if post stats caching is active.
- Fixed: stats ordering not working in author view.
- Fixed: sorting parameters not included in page permalink.
- Fixed: counting settings could not be saved if the visits payment callback value had an invalid callback, even if visits payment was inactive.
- Fixed: possible PHP notice in cache class.
- Fixed: PHP notice in BuddyPress addon if no posts were to be displayed.
- Tweak: several enhancements under the hood.
- New: post stats are now cached for one day. This speeds up stats page loading by roughly 50%! The feature can be disabled in case of issues.
- Tweak: updated plugin hooks for compatibility with the new Request Payment addon.
- Tweak: improvements in update routine.
- Tweak: hidden Error Log box from non-general options pages.
- Tweak: better hiding of general options boxes from non-general options pages.
- Fixed: License box not showing localized strings.
- Fixed: tooltip line breaks not shown on certain browsers/systems.
- Fixed: roles and users picker in stats page would display roles/users set not-to-show-up in stats as well.
- Fixed: This week choice in stats time range would not work correctly.
- New: when activating addons, license keys can now be displayed alongside the addon name.
- Tweak: improved error message of License is not a PPCP_License Object error when activating addons.
- Tweak: updated italian locale.
- Tweak: improved performance when clearing cache.
- Tweak: minor improvements.
- Fixed: future days not pickable in stats date picker (even if there were future scheduled posts).
- Fixed: This year option not working correctly in stats date picker.
- Fixed: possible warning in stats page for users with PRO version.
- Fixed: Import/Export settings box may not work correctly the first time user settings were customized.
- Fixed: stats time end not going up to today, causing issues with Publisher Bonus addon (for example).
- Fixed: Total is X. Displayed is what you’ll be paid for message on hover would not display the total amount.
- Tweak: improved stats page loading time.
- Fixed: possible error in stats page (undefined counting_types_object index)
- Fixed: changing the display setting for payment criteria did not have any effect.
- Fixed: improved styling of upper-right corner of stats page.
- Fixed: declared as static some install methods.
- Tweak: updated italian and turkish translations.
- Feature: dropdown to select a user to view stats for after picking a user role in stats page.
- Feature: supporting each post to have different payment criteria enabled. This allows to effectively selectively enable/disable payment criteria for each category through the Category Custom Settings, for example, and also allows (in theory) to set up per post settings.
- Tweak: minor performance improvements in stats generation.
- Fixed: broken stats time range picker.
- Fixed: issue with dates due to new year.
- Fixed: improved error handling.
- Tweak: updated French translation.
- Tweak: improved Payment systems section layout for payment criteria.
- New: addon BuddyPress
- Fixed: compatibility with PHP < 5.5 (array_column() error).
- Tweak: (PRO users) header name is not Post Pay Counter – Stats, but whatever you have set your menu label to be named like.
- Tweak: changed Total payment threshold label in metabox.
- Fixed: log data left in stats page.
- Fixed: fatal error in stats if no posts were to be displayed.
- Fixed: broken mark as paid for PRO users.
- Fixed: fatal error in stats for few people.
- Feature: stats page can now be sorted! Just click on a column and the whole table will be sorted for that column.
- Feature: stats page supports pagination! Default number of items per page is 300, but you can change it in the Screen Options section (upper-right corner).
- Feature: stats columns can now be hidden through the Screen Options section in the upper-right corner.
- Fixed: stats time picker would not allow to pick future days as end time, making the Count future scheduled posts uneffective.
- Fixed: payment tooltip not displayed for any user if one user was not supposed to have it.
- Tweak: automating cache purging for css and js files using WP file versions.
- Tweak: sorted list of active licenses in License Status box.
- Tweak: updated Italian translation.
- Tweak: minor performance improvements.
- Fixed: yet more issues with default stats time range.
- Tweak: minor improvements.
- Fixed: default stats time range allowed to pick two choices.
- Fixed: minor fixes.
- Fixed: fatal error on stats page on certain server setups (lacking PHP calendar plugin).
- New: time range dropdown choice in stats page to quickly pick the desired time frame.
- New: added All time to default time range choices.
- New: added Last month to default time range choices.
- New: added This year to default time range choices.
- Fixed: PHP7 issues as found by WPEngine compatibility checker.
- New: addon Pay Per Character
- Fixed: notices in stats page when no payment criteria were enabled for some users.
- New: French translation (Alexandre Mark).
- Fixed: last update broke stats countings (though nothing happened to payments).
- Fixed: notice in stats page when no payment criteria were enabled.
- New: released Author Payment Bonus and Category Custom Settings released!
- Fixed: issue with empty stats.
- Feature: include post excerpt in word count payment.
- Fixed: users having different allowed post statuses settings impacting general stats with wrong data.
- Fixed: fixed notice for unactive counting types on tooltip generation.
- Fixed: wrong error message displayed when no posts were selected.
- Fixed: several PHP notices in stats page when no posts reached the threshold.
- Fixed: PHP notice and some images not displayed in addons page.
- Tweak: updated italian translation.
- Fixed: mispelled cache key resulting in poorer performance.
- Fixed: wrong pagepath on “Insert valid license for automatic updates” link.
- Fixed: expired license notice displayed on all addons, even not yet expired ones.
- Fixed: PHP notices with PRO bonus payment enabled.
- Fixed: possible PHP Warning in case of notifications error.
- Tweak: stripping PHP ?> closing tag.
- Fixed: issues with memcached and other parmanent caching systems – settings changes didn’t affect stats.
- Fixed: possible PHP errors with PHP 7.
- Tweak: using local time format.
- Tweak: using WP checked(), selected() and disabled() functions.
- Huge performance improvements! Basing on our tests, with all counting types enabled (basic, words, visits (postmeta), comments and images), we managed to load 6500+ posts in around 10 seconds (overall stats disabled).
- New: option to avoid making post titles clickable in stats (off by default, improves performance).
- New: option to avoid making super-cautious spaces parsing in word count (off by default, improves performance).
- New: option to avoid display of payment tooltips in stats (on by default).
- New: making use of WP_Object_Cache. If you use a permanent cache plugin, part of PPC requests will be cached as well.
- New addon released to set custom settings per user role!
- Fixed: admins override permissions feature didn’t check the user role, but manage_options capability (so non-admins who could manage_options would override permissions).
- Fixed: PHP warning due to missing argument.
- Fixed: addons page would display “Array” and no addons in some sites.
- Fixed: saving user settings could overwrite past settings.
- Fixed: settings import/export did not work cross-user.
- Tweak: settings import/export only considers settings which are different from general.
- Tweak: personalize users list can take up more space, so more users fit in it without scrolling.
- Tweak: allowing for faster settings retrieval.
- Tweak: new actions and filters.
- Fixed: hour:minute:second date format wrongly displayed.
- Tweak: addons list is now displayed even if network requests are not working, and anyway is only updated every two days.
- Fixed: issue with user settings not saving in certain circumstances.
- Fixed: people with PRO version prior to 220.127.116.11 had problems in activating/deactivating their addons license.
- Tweak: moved promotional boxes in the Options page down below all important boxes.
- Tweak: deleted old lang files.
- New: it’s now possible to control what is displayed in the stats page for each payment criteria. You can display just the counting number, just the payment value, both or completely hide a column but still have the payment criteria active, and you can even personalize this per-user!
- New: when personalizing a user settings, only settings that have a different value from general settings are stored in the database. This allows for less data to be stored; moreover, when general settings are updated, users don’t retain outdated settings, but all settings that have not been specifically changed for them, follow the general ones. This only applies to newly-personalized user’s settings.
- Tweak: hidden license box when personalizing user settings, and moved it under the Personalize settings box in the general options.
- Tweak: updated italian translation.
- New: added option to allow admins to override all permissions. This applies only if they don’t have specific personalized settings.
- Fixed: notification dismissing not fading out immediately but only at subsequent page load.
- Fixed: notifications being displayed on all admin pages instead of just on plugin pages.
- Fixed: new notification not being displayed.
- New: all addons are now compatible with the free version alone, no need to get the PRO if you just need features from another addon (we moved to a new site).
- Tweak: sped up tooltip generation.
- Tweak: removed penguins logo in stats/options page.
- New: added Turkish translation (Kamer DINC).
- New: added Czech translation (Jiří Kučera).
- Tweak: backend improvements (new filters/actions/stuff like that).
- Fixed: last update broke localization.
- Fixed: PHP warnings when payments consisting of only Bonus would be done.
- Fixed: (hopefully for real): possible fatal error due to too many redirects on update.
- Fixed: when selecting a time range, the end time doesn’t go to the day after the selected one any more.
- Tweak: changed text domain to post-pay-counter to grant compatibility with WP Language Packs.
- Fixed: PRO shortcode wouldn’t exclude selected columns in detailed stats.
- Fixed: problems in saving custom visits counter callback function.
- Fixed: detailed stats generation not working in HHVM environments.
- Fixed: possible fatal error due to too many redirects on update.
- Fixed: word counter wouldn’t count one-char words.
- Fixed: correctly handling of that wouldn’t be counted as spaces as resulting from strange behavior of the editor.
- New: install procedure now grants by default all permissions to administrator by personalizing their settings (the user id of the user who installs the plugin is taken).
- Tweak: new PHP method that generates stats table tbody. That’s a public one that can by used by any implementation (for example, is used several times in the PRO).
- Fixed: layout broken in user settings page, with links at the top being smushed in the upper-right corner.
- New: added pot files to translate plugin in whatever language.
- Tweak: hiding the Filter by user role feature in stats page if user doesn’t have the permission to see other people’s stats.
- Tweak: on install, notifications issued before install date are all hidden in bulk.
- New: added Dutch translation (Elza van Swieten).
- Fixed: after last updated PRO version Analytics visits wouldn’t show up.
- New: stats countings now display amounts that should be paid (is a post has 300 words and the upper payment limit is 200, the counter will show 200). Clicking on the amount will display the real total amount.
- Tweak: preventing (for 6 hours) notifications update if the request generated an error.
- Fixed: couple of non-static methods called statically.
- Fixed: general stats would not display all needed columns when users had different counting types enabled.
- Fixed: notification dismissing would log an error.
- Tweak: when a counting type is disabled for a user, data related to that cnt type in general stats is shown as “N.A.”.
- Tweak: notifications remote request timeout decreased to 2 seconds.
- Tweak: extended notifications transient validity (2 days).
- Tweak: logging errors in HTTP notifications list request.
- Tweak: possible to select future dates as stast end times (allows to see future scheduled posts).
- Tweak: new actions needed for the Facebook addon.
- Tweak: notifications processing only made in wp-admin, just as a bit of speed-up.
- Feature: possible to filter stats view by user role: select a user role and get stats only for users belonging to that one.
- Fixed: prevent PHP warning if website can’t contact developer server to check for notifications.
- Tweak: ensuring logged plugin errors are automatically deleted after 20 days.
- Fixed: fatal error in PRO payment history windows.
- Fixed: last update would break PRO Analytics feature.
- Feature: possible to specify a callback function for visits counting, instead of a postmeta (grants compatibility with Post Views Counter and more custom counting plugins).
- Fixed: word counting problems for non-latin characters.
- Fixed: (this time for real) notifications would be displayed on all admin pages although they were not supposed to.
- Fixed: word count would sometimes miss a word (the last one).
- Fixed: notifications would be displayed on all admin pages although they were not supposed to.
- Tweak: updated Italian and German translations (thanks Julian).
- Feature: now possible to include gallery images in images counting (disabled by default, go to Counting settings > Images payment to enable it).
- Feature: introducing plugin notifications system.
… several old versions changes removed …
IMPORTANT NOTICE: Versions 2.0 or higher need to be reinstalled if you had a previous version due to its different settings storage system and the availability of new features. Also, the following features are currently missing: post payment bonus, trial settings, csv esport, full multisite integration, word count in post list. They will be added soon. If you need one specifically, let me know in order to make up a priority list.
- Almost complete plugin redesign and code refactoring which should give dramatic speed improvements. Less data is stored in the database, making requests lighter.
- The plugin is now fully extensible, check the list of hooks and filters.
- Supports localization.
- Words and visits are not mutually esclusive counting types anymore.
- Plugin’s visits counting method is not available anymore. If you use some other plugin to keep track of visits, you can specify its postmeta and Post Pay Counter will use that. Post Pay Counter PRO (soon available) will allow use of Google Analytics.
- Images and comments can now use both incremental and zones payment system.
- Up to 10 zones are allowed now.
- Feature to allow payment only when certain threshold is met.
- Settings save is now AJAX working.
- Post featured image can now be counted as well.
A paid addon to Post Pay Counter, PRO, will be released soon, adding more new features.