GVKun编程网logo

通过Ajax手动解决WordPress WP-PostViews不计数的问题

15

本文将分享通过Ajax手动解决WordPressWP-PostViews不计数的问题的详细内容,此外,我们还将为大家带来关于javascript–WordPress使用WordPress将ajax值传

本文将分享通过Ajax手动解决WordPress WP-PostViews不计数的问题的详细内容,此外,我们还将为大家带来关于javascript – WordPress使用WordPress将ajax值传递给特定页面、javascript – 通过Ajax加载WordPress帖子、javascript – 通过AJAX动态更改WordPress中的导航链接(下一个和上一个)、jquery – 如何使用Ajax onclick加载WordPress Post的相关知识,希望对你有所帮助。

本文目录一览:

通过Ajax手动解决WordPress WP-PostViews不计数的问题

通过Ajax手动解决WordPress WP-PostViews不计数的问题

某个网站开启了Memcached,并安装了WP-PostViews,但是不知道咋滴文章的浏览计数不起作用了。

在经过一番摸索之后,发现WP-PostViews是通过ajax发送请求来计数的。再一看出问题的那个网站,根本就发送这个请求。

在经过一番wordpress后台设置和插件摸索后,还是没找到原因。

无奈,使出最终杀手锏,自己手动添加这个请求的script,添加到页面底部,代码如下:

<?PHP if  (is_singular()) : ?>
  <!-- ajax post view -->
  <script type= "text/javascript" >
   $.ajax({
    url: "http://***.com/wp-admin/admin-ajax.PHP",data: {
     "postviews_id" : "<?PHP the_ID(); ?>","action" : "postviews","_" : new  Date ().getTime()
    }
   });
  </script>
<?PHP endif ; ?>

以上所述是本文给大家介绍的通过Ajax手动解决wordpress WP-PostViews不计数的问题,希望大家喜欢。

javascript – WordPress使用WordPress将ajax值传递给特定页面

javascript – WordPress使用WordPress将ajax值传递给特定页面

我想将变量传递给特定页面.我找到了一个简单的例子,解释了如何在wordpress中使用ajax.

JavaScript的:

jQuery(document).ready(function($) {

// We'll pass this variable to the PHP function example_ajax_request
var fruit = 'Banana';

// This does the ajax request
$.ajax({
    url: ajaxurl,
    data: {
        'action':'example_ajax_request',
        'fruit' : fruit
    },
    success:function(data) {
        // This outputs the result of the ajax request
        console.log(data);
    },
    error: function(errorThrown){
        console.log(errorThrown);
    }
});  

});

要在functions.PHP中插入的PHP片段

function example_ajax_request() {

// The $_REQUEST contains all the data sent via ajax
if ( isset($_REQUEST) ) {

    $fruit = $_REQUEST['fruit'];

    // Let's take the data that was sent and do something with it
    if ( $fruit == 'Banana' ) {
        $fruit = 'Apple';
    }

    // Now we'll return it to the javascript function
    // Anything outputted will be returned in the response
    echo $fruit;

    // If you're debugging, it might be useful to see what was sent in the $_REQUEST
    // print_r($_REQUEST);

}

// Always die in functions echoing ajax content
  die();
 }

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );


   wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' =>   admin_url( 'admin-ajax.PHP' ) ) );

不幸的是我无法传递变量.我检查了代码,我收到了这个错误:

Error: ajax_object is not defined

您是否知道另一种获得相同结果的方法?

解决方法:

你很近,但有一些小事丢失了……

我在评论中的意思是,你需要在两者中使用’ajax-script’这样使用它:

add_action('wp_enqueue_scripts', 'add_js_scripts'); 
add_js_scripts(){
    wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', true );
    wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajaxurl' =>   admin_url( 'admin-ajax.PHP' ) ) );
}

将$_REQUEST更改为$_POST:

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax
    if ( isset($_POST) ) {

        $fruit = $_POST['fruit'];

        // Let's take the data that was sent and do something with it
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Now we'll return it to the javascript function
        // Anything outputted will be returned in the response
        echo $fruit;

        // If you're debugging, it might be useful to see what was sent in the $_POST
        // print_r($_POST);

    }

    // Always die in functions echoing ajax content
      die();

 }

添加了add_action(‘wp_ajax_nopriv_ …):

add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); // <= this one
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

对于你的jQuery脚本script.js文件,有两件重要的遗漏:

jQuery(document).ready(function($) {

    /* We'll pass this variable to the PHP function example_ajax_request */
    var fruit = 'Banana';

    /* This does the ajax request */
    $.ajax({
        url: ajax_object.ajaxurl, /* <====== missing here */
        type : 'post', /*    <========== and missing here */
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            /* This outputs the result of the ajax request */
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });  

});

这应该现在工作……

参考文献:

> Using AJAX With PHP on Your WordPress Site Without a Plugin
> How to use Ajax with your WordPress Plugin or Theme?

javascript – 通过Ajax加载WordPress帖子

javascript – 通过Ajax加载WordPress帖子

所以,我有这个< div>我的博客文章包含在其中.它的类是.post.我想要做的是每次有人点击小部件区域的最近帖子时,内容都是通过Ajax加载而不是刷新页面.

这是我的代码

jQuery(function()
{
    jQuery(".umrp-list li a").click(function(){ //here I select the links of the widget
        var post_url = jQuery(this).attr("href");
        jQuery(".post").html('<div>Loading Content...</div>');
        jQuery(".post").load(post_url);
        return false;
    });
});

所以我有两个问题

>每当我点击“最近的帖子”链接时,内容会加载我要加载的位置,但点击后我的网页会空闲/冻结约2秒.为什么会这样?
>当我第一次点击时,除了上面描述的细节之外,一切都有效.当我第二次点击(另一个链接或甚至是相同的)时,它不是加载我点击的帖子,而是将我的整个网页加载到.post容器上.任何想法为什么会这样?

解决方法

听起来你正在同步发送请求.同步操作是阻塞的,而异步操作允许UI在操作在幕后完成时继续运行.

至于第二个问题,听起来像jQuery(this)以某种方式指向文档而不是元素的上下文.第二次检查你的“this”值,它可能会为你提供一些见解.

javascript – 通过AJAX动态更改WordPress中的导航链接(下一个和上一个)

javascript – 通过AJAX动态更改WordPress中的导航链接(下一个和上一个)

我在WordPress网站上,在single.PHP的循环内,是一个select标签,其中的选项是通过自定义查询返回的当前类别的帖子.

在更改所选选项时,我有许多javascript函数运行良好,但它们中的最后一个函数(函数f_next-prevIoUs),似乎不起作用.

此功能的目的是更新下一个和上一个链接而不重新加载页面.

相对于我的模板中的导航链接(下一个和上一个)的代码运行良好,并在上面:

<div id="nav-above">

<divhttps://www.jb51.cc/tag/IoU/" target="_blank">IoUs"><?PHP prevIoUs_post_link( '%link','<img height="34" src="' . get_bloginfo("template_directory") . '/images/prevIoUs.png" />' ); ?></div>

<div><?PHP next_post_link( '%link','<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

</div><!-- #nav-above -->

这个函数的javascript代码是:

function f_next-prevIoUs(id)
{
       $.ajax({  
       cache: true,type: "GET",timeout: 5000,url: 'wp-content/themes/twentyten/pages/next-prevIoUs.PHP?p='+id,success: function(msg)  
        {  

    $('#nav-above').html(msg);

        },error: function(msg)  
        {  
           alert("Your browser broke!");
                return false;
        }  
});

}

文件next-prevIoUs.PHP的内容是:

<?PHP
$p=$_GET['p']; 
require( '../../../wp-load.PHP' );



$my_query = new WP_Query();
$my_query->query(array( 'post__in' => array($p)));

if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();  ?>


<divhttps://www.jb51.cc/tag/IoU/" target="_blank">IoUs"><?PHP prevIoUs_post_link( '%link','<img height="34" src="' . get_bloginfo("template_directory") . '/images/prevIoUs.png" />' ); ?></div>
<div><?PHP next_post_link( '%link','<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

<?PHP

endwhile;
endif;

?>

在通过给p参数赋值来测试这个PHP文件时,它在浏览器中给出了逻辑结果. Jquery和函数脚本都包含在内,我网站上的所有AJAX都可以.我在这项工作中缺少什么?

更新:
请注意,负责触发AJAX调用的single.PHP文件部分是:

<form method="post" action="">  

    <selectname="" id="" >
    <option value="<?PHP the_ID();?>"><?PHP the_title();?></option>

    <?PHP 
global $post;
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$myposts = get_posts("paged=$paged&category=4");

foreach($myposts as $post) :?>

        <option value="<?PHP the_ID();?>"><?PHP the_title();?></option>

        <?PHP endforeach;
        wp_reset_postdata(); ?> 

        </select>
        </form>

解决方法

首先,我想要注意的是,我在问题中提到的方法很糟糕,根据几乎在教程中谈论有关wordpress的AJAX.所以我决定根据hakre的建议和他的链接来改变它: http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Viewer-Facing_Side.

换句话说,对我来说最好的方法是使用wp-admin / admin-ajax.PHP在wordpress中使用内置的AJAX.应将AJAX请求定向到此文件.我知道文件名的“admin”部分有点误导.但是前端(查看方)和管理面板中的所有请求都可以在admin-ajax.PHP中处理,具有很多好处,特别是对于安全性.

步骤是:

1.提交AJAX请求的JavaScript代码应如下所示:

$(document).ready(function() {
        $('.select2').change(function(e) {
    e.preventDefault();

    var v = $('.select2 option:selected').val(); 


            $.ajax({
                type: "GET",url: "wp-admin/admin-ajax.PHP",// check the exact URL for your situation
                dataType: 'html',data: ({ action: 'nextPrevIoUs',id: v}),success: function(data){

                $('#nav-above').html(data);

                },error: function(data)  
                {  
                alert("Your browser broke!");
                return false;
                }  

            }); 

    }); 
});

请注意,在放置JS脚本时应该尊重wordpress的要求(通常在wp-footer()之前的footer.PHP中)

2-处理行动:

在您主题的functions.PHP中(或直接在您的插件文件中),添加:

add_action('wp_ajax_nextPrevIoUs','nextPrevIoUs');
add_action('wp_ajax_nopriv_nextPrevIoUs','nextPrevIoUs');

并在同一个文件中定义nextPrevIoUs回调函数,如下所示:

function nextPrevIoUs() {

$p= $_GET['id'];
$my_query = new WP_Query();

$my_query->query(array( 'post__in' => array($p)));

if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?>



 <divhttps://www.jb51.cc/tag/IoU/" target="_blank">IoUs"><?PHP prevIoUs_post_link( '%link','<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

<?PHP endwhile;
endif;                  

wp_reset_query();

die();

}

不要忘记模具功能,这是强制性的.

有关wordpress中AJAX的更多详细信息,Google首页教程很好.

jquery – 如何使用Ajax onclick加载WordPress Post

jquery – 如何使用Ajax onclick加载WordPress Post

我花了几个小时阅读和尝试教程.我似乎无法找到一个有效的解决方案,我知道它应该很容易,但我很难与 AJAX.

总结

以上是小编为你收集整理的jquery – 如何使用Ajax onclick加载WordPress Post全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

关于通过Ajax手动解决WordPress WP-PostViews不计数的问题的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于javascript – WordPress使用WordPress将ajax值传递给特定页面、javascript – 通过Ajax加载WordPress帖子、javascript – 通过AJAX动态更改WordPress中的导航链接(下一个和上一个)、jquery – 如何使用Ajax onclick加载WordPress Post的相关信息,请在本站寻找。

本文标签: