WP_SESSION不使用AJAX

时间:2015-06-27 作者:vajrasar

其概念是在帖子内容中放置一个按钮,用户可以单击该按钮。

两件事-应该显示帖子的ID和用户单击按钮的次数。

原因-我们将帖子呈现为产品,用户可以使用该按钮添加产品,点击按钮的次数将表示他想要的数量。

该逻辑在普通php会话中运行良好,但在使用Eric Mann的WP session Manager插件的WP\\U会话中不起作用,该插件被视为在WP中使用会话的标准方式。

工作php会话代码-Github

使用WP\\U会话,它可以成功地显示第一次单击按钮时应该显示的内容,但不会在多次单击时显示。从不

这是定制的。js文件--->

jQuery( \'.click\' ).on( \'click\', function() {

        var post_id = jQuery( this ).attr( "data-id" );
        var thisis = jQuery( this );

        jQuery.ajax({

            url: postcustom.ajax_url,
            type: \'post\',
            data: {
                action: \'vg_show_post_id\',
                post_id: post_id,
            },
            success: function( response ) {
                jQuery( thisis.next( \'#after-ajax\' )  ).fadeIn( "slow" );
                jQuery( thisis.next( \'#after-ajax\' )  ).text( "Item is added to the cart!" );
                jQuery( \'#session-sidebar\' ).html( response );
                jQuery( thisis.next( \'#after-ajax\' ) ).fadeOut( "slow" );
            }

        });

    });
这是在函数中。php文件--->

<?php

/*****************************
*
* Ajax Stuff
*
********************************/

function vg_session_start() {
    global $wp_session;
    global $cart;
    global $counter;

    $wp_session = WP_Session::get_instance();

    if( !empty( $cart ) ) {
        $cart = $wp_session[\'wpscart\']->toArray();
    }
}
add_action( \'init\', \'vg_session_start\' ); // Starting Session

function ajax_test_enqueue_scripts() {
    wp_enqueue_script( \'customjs\', get_stylesheet_directory_uri() . \'/js/custom.js\', array(\'jquery\'), \'1.0\', true );
    wp_localize_script( \'customjs\', \'postcustom\', array(
                                \'ajax_url\' => admin_url( \'admin-ajax.php\' )
                            ));
}
add_action( \'wp_enqueue_scripts\', \'ajax_test_enqueue_scripts\' ); // Enqueueing Scripts

function vg_after_entry() {
    ?>
    <button type="button" class="click" href="#" data-id="<?php echo get_the_ID(); ?>">Submit</button>
    <div id="after-ajax">
        <!-- to do post ajax stuff -->
    </div>
    <?php
}
add_action( genesis_entry_footer, vg_after_entry ); // Adding button in post content

function vg_show_post_id() {
    global $wp_session;
    global $cart;

    $wp_session = WP_Session::get_instance();

    $cart = $wp_session[\'wpscart\']->toArray();

    $p_id = $_REQUEST[\'post_id\'];
    $title = get_the_title( $p_id );

    if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) {

            if ( !empty( $cart ) && array_key_exists( $p_id, $cart ) ) {

                $cnt = $cart[$p_id];
                $cnt++;
                $cart[$p_id] = $cnt;

            } else {

                $cart[$p_id] = 1;

            }

            foreach( $cart as $key=>$value ) {
                echo "<br />" . get_the_title( $key ) . " " . $value . " units";
                echo "<hr />";
            }

            $wp_session[\'wpscart\'] = $cart;
            die();

    } else {
        echo "Not in admin-ajax";
    }

}
add_action( \'wp_ajax_nopriv_vg_show_post_id\', \'vg_show_post_id\' ); // for ajax
add_action( \'wp_ajax_vg_show_post_id\', \'vg_show_post_id\' ); // for ajax
除此之外,每次都会出现一个主要错误-Fatal error: Call to a member function toArray() on a non-object in /home/xxxxx/public_html/bcm/wp-content/themes/genesis-sample/functions.php on line 88 其中包含以下代码—$cart = $wp_session[\'wpscart\']->toArray();

2 个回复
SO网友:Sam Loyer

我认为在你的代码中,你必须为ajax表演添加这一行

jQuery.ajax({
type    : \'POST\',
url     : \'<?php echo admin_url(\'admin-ajax.php\'); ?>\',
data    : { action : \'vg_show_post_id\', post_id: $post_id, data-id: true },
),

SO网友:Hari Om Gupta

我认为您需要在init action开始会话,找到下面给出的代码片段。。可能对您有帮助。:)

    add_action(\'init\',\'vg_session_start\');
        function vg_session_start(){
         if( !session_id() )
           session_start();
         }
         ...... your code.....

结束