Есть много плагинов, которые делают это, вы можете просто Google их, Но если вы хотите знать, как это может быть легко (и primitivly) осуществляется с помощью пользовательских полей, то здесь вы идете:
add_action('wp_ajax_nopriv_o99__action', 'o99__ajax_cb');
add_action('wp_ajax_o99__action', 'o99__ajax_cb');
// this fanction is the ajax callback.
function o99__ajax_cb(){
// Verify the nonce to make sure the request is ours and legael...
if(!isset($_REQUEST['nonce']) || ! wp_verify_nonce($_REQUEST['nonce'], 'o99__nonce')) die('-1');
$post_id = isset($_REQUEST['post_id']) ? absint($_REQUEST['post_id']) : 0;
if(! $post_id) die('-1');
$counter = get_post_meta($post_id, 'o99_good_post', true);
$counter = absint($counter);
$cookie = 'o99_post_vote' .$post_id;
if($counter){
if (!isset($_COOKIE[$cookie])) {
$counter++;
}
else {$counter=$counter;}
}
else{
$counter = mt_rand(20,150);
}
update_post_meta($post_id, 'o99_good_post', $counter); //hidden field
echo $counter;
die();
}
function o99__good_bad(){
global $post;
// send a simple cookie
$cookie = 'o99_post_vote' .$post_id;
$count = get_post_meta($post->ID, 'o99_good_post', true); //hidden field
if (!$count){
$count = '0';
}
$icon = '<img src="';
$icon .= get_bloginfo('template_url') ; // better using get_stylesheet_uri() now
if (!isset($_COOKIE[$cookie])) {
$icon .= '/images/dl-star16.png"/>'; // set up your icons according to case
}
else {
$icon .= '/images/dl-v16.png"/>';
}
?>
<span id="o99__click" title="Click Here to Vote this Post up"><?php echo $icon; ?> click here to vote up
This post was voted <span id="o99__count"><?php echo strip_tags($count);?>
</span> times</span>
<?php
}
// just injecting the JS into head --
add_action('wp_head', 'o99__head');
function o99__head()
{
if(! is_singular()) return;
$post_id = get_queried_object_id();
?>
<script type="text/javascript">
var o99__data = {
action: 'o99__action',
post_id: '<?php echo absint($post_id); ?>',
nonce: '<?php echo wp_create_nonce('o99__nonce'); ?>',
}
jQuery(document).ready(function(){
jQuery('#o99__click').click(function(){
jQuery.get(
'<?php echo site_url('wp-admin/admin-ajax.php'); ?>',
o99__data,
function(data){
if(jQuery.cookie('o99_post_vote<?php echo absint($post_id); ?>') != null) {
alert('You can only vote once per post!');
};
if(jQuery.cookie('o99_post_vote<?php echo absint($post_id); ?>') == null) {
if('-1' != data)
{
jQuery('span#o99__count').html(data);
jQuery.cookie('o99_post_vote<?php echo absint($post_id); ?>', 'voted', { expires: 7 });
alert('your vote was accepted!');
};
}
}
);
});
});
</script>
<?php
}
?>
Это очень старая функция, которая была взломана давно, он должен еще работать, но, возможно, потребуется немного полируют ..
Редактировать Я некоторые примеры более сложных плагинов:
http://wordpress.org/extend/plugins/post-ratings/ http://wordpress.org/extend/plugins/post-ratings/screenshots/ http://wordpress.org/extend/plugins/gd-star-rating/ и если вы будете искать старинную рукопись вы найдете гораздо больше ..
, перечисленные выше поддержки пользовательских типов почтовых.
Спасибо. Я попытаюсь найти эти плагины или реализовать этот фрагмент. Вы знаете, совместимы ли эти плагины с пользовательскими типами? – xger86x
, вообще говоря, если не указано иное, пользовательский тип сообщения - это просто сообщение, и большинство плагинов будут работать с ними (если не указано иное) –
см. Редактировать I для некоторых предложений –