使用自定义字段的职位评级

时间:2011-08-24 作者:Nikita Kasyanov

我正在为我的博客写新主题。我想使用自定义字段进行某种后评价。

有两个字段:“好帖子”和“坏帖子”。在每篇帖子之后,我都放了两个按钮。是的,“好帖子”和“坏帖子”。在按钮上,我放置了调用此AJAX函数的onclick事件:

function ajaxIncGoodPost(tempUrl)  {
    var postID = $("good-post").attr("rel");

    jQuery.ajax({
    type: "POST",
    url : tempUrl+"/rating.php",
    data: "opinion=good&postID="+postID,
    success: function(msg){
    alert( "Спасибо за вашу хорошую оценку!" );
        }
    });
}
它在中调用此函数rating.php:

$postID = $_REQUEST[\'postID\']; 

if ( $_REQUEST[\'opinion\'] == \'good\' ) {
    $good_post = get_post_meta($postID, \'good-post\');

    function inc_good_post() {
        $good_post++;
        update_post_meta($postID, \'good-post\', $good_post); 
    }
}
所以每次点击这个按钮都会调用递增的函数\'good-post\' 值并将其存储在字段中。但问题来了。单击按钮后,弹出AJAX函数的成功消息,但自定义字段的值不变。

我认为这是因为在我以前的帖子中没有这样的字段,但根据Wordpress Codexupadate_post_meta() 检查此字段是否存在,如果不存在,则调用add_post_meta() 这将创建字段。但这也不合适。

在这一点上,我没有发现任何错误。如果你对这个问题有任何猜测,请分享!

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

首先,您应该考虑使用构建WordPress功能,而不是直接链接到PHP文件。任何人都可以很容易地利用这一点,人为地为帖子投票。

要使用wordpress ajax功能,请将ajax请求发送到您的站点。com/wp-admin/admin-ajax。php,并使用标准插件挂钩系统。

托尔曼兹的回答是正确的:你的更新post-meta和get-post-meat调用不起作用,因为WordPress环境没有加载到评级中。php。使用管理ajax的另一个原因。php来处理您的响应。

下面是一个示例:

<?php
add_action( \'wp_ajax_nopriv_wpse26789_action\', \'wpse26789_ajax_cb\' );
add_action( \'wp_ajax_wpse26789_action\', \'wpse26789_ajax_cb\' );
function wpse26789_ajax_cb()
{
    // Verify the nonce to make sure the request came from an actual page...
    if( !isset( $_REQUEST[\'nonce\'] ) || ! wp_verify_nonce( $_REQUEST[\'nonce\'], \'wpse26789_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, \'good_post\', true );
    $counter = absint( $counter );

    if( $counter )
    {
        $counter++;
    }
    else
    {
        $counter = 1;
    }

    update_post_meta( $post_id, \'good_post\', $counter );
    echo $counter;
    die();
}
那么你的前端可能需要稍微改变一下。

这里有一个函数可以放在单曲的循环中。php文件:

<?php 
function wpse26789_good_bad()
{
    global $post;
    $count = get_post_meta( $post->ID, \'good_post\', true );
    ?>
    <p id="wpse26789_click">Click Here to Vote this Post up</p>
    <p>This post has <span id="wpse26789_count"><?php echo strip_tags( $count ); ?></span> votes</p>
    <?php
}
某处单身。php插入wpse26789_good_bad() 或者将函数中的代码插入到single中。php(除了global $post) 回路中的任何位置。

然后,您需要稍微修改一下javascript。我刚刚在这里连接到wp\\u head,将javascript添加到<head> 任何单数岗位的部门。

<?php
add_action( \'wp_head\', \'wpse26789_head\' );
function wpse26789_head()
{
    if( ! is_singular() ) return;
    $post_id = get_queried_object_id();
    ?>
    <script type="text/javascript">
        var wpse26789_data = {
            action: \'wpse26789_action\',
            post_id: \'<?php echo absint( $post_id ); ?>\',
            nonce: \'<?php echo wp_create_nonce( \'wpse26789_nonce\' ); ?>\',
        }
        jQuery(document).ready(function(){
            jQuery( \'#wpse26789_click\' ).click(function(){
                jQuery.get( 
                    \'<?php echo site_url( \'wp-admin/admin-ajax.php\' ); ?>\', 
                    wpse26789_data, 
                    function( data ){
                        if( \'-1\' != data )
                        {
                            jQuery( \'span#wpse26789_count\' ).html( data );
                            alert( \'Your Message!\' );
                        }
                    }
                );
            });
        });
    </script>
    <?php
}
作为插件:http://pastie.org/2423993

SO网友:tollmanz

在没有看到更多代码和将AJAX请求路由到单独的PHP文件的情况下,我对此的最大猜测是“rating.PHP”没有加载到WordPress环境中,这意味着get_post_metaupdate_post_meta 在您尝试使用它们时,它们对您不可用。WordPress实现了一个在WordPress环境中进行AJAX调用的优秀系统。首先看一下这篇文章:http://codex.wordpress.org/AJAX_in_Plugins.

结束

相关推荐

Sort plugins by rating

当我想安装一个新的Wordpress插件时,我会搜索我想要的插件,并收到一个结果列表。有没有办法按评级或名称对结果进行排序?如果没有,它将是Wordpress的一个有用的补充。