AJAX php函数内的is_Single()条件检查

时间:2017-09-07 作者:user300979

我正在创建一些动态内容,但我需要在php函数中运行一个条件is\\u single()检查

add_action( \'wp_ajax_rando_func\', \'rando_func\' );
add_action( \'wp_ajax_nopriv_rando_func\', \'rando_func\' );

function rando_func() {
   if (is_single()) {
        //do stuff
   }
}
这不起作用,所以我尝试添加ID

function rando_func() {
   $page_id = $_POST["page_id"];
   if (is_single($page_id)) {
        //do stuff
   }
}
这也没什么好运气。我如何做到这一点?

1 个回复
SO网友:HU ist Sebastian

如果实际服务器进程中显示单个页面,则返回is\\u single。在Ajax函数中,没有什么是;“显示”;,你在做Ajax。

要检查浏览器中当前显示的对象是否为单个对象,需要将有关此信息从为浏览器提供服务的服务器进程传输到处理ajax请求的服务器进程。

请尝试以下操作:步骤1:将信息输入Javascript函数。您可以从$wp\\u查询对象获取信息。如果直接响应执行AJAX请求的javascript,可以这样做:

<script>
var is_single = <?php echo (is_single() ? \'1\' : \'0\' ); ?>;
</script>
如果要将ajax调用程序脚本排入队列,可以使用wp_localize_script .

步骤2:将is\\U单个信息发布到Ajax函数

步骤3:check edit below! 更改Ajax PHP函数以合并is\\U单一信息:

function rando_stuff(){

 $single = (int)$_POST[\'is_single\'];
    if($single){
       //do stuff
    }
}
步骤4:利润;)

============================================EDIT 2022-02-20:

5年前,我就是这样编码的。然而,从那时起,我学到了更多关于正确使用POST值的知识,因此我重写了步骤3的函数。解释:每个POST或GET传输的值没有数据类型,因此它们被解释为字符串。要将这些值用作布尔(真/假)数据类型,我们必须对其进行类型转换。幸运的是,Wordpress有一个功能可以正确解释这一点。

function rando_stuff_improved(){
     $is_single = false;
     if( isset( $_POST[\'is_single\'] ) ){
        $is_single = rest_sanitize_boolean( $_POST[\'is_single\'] );
     }
     if( $is_single ){
        //do stuff
     }
   }

结束

相关推荐

困惑AJAX通过页面模板提交表单

我想我已经看了太多的代码,在试图更好地理解WordPress和AJAX中的表单时把自己弄糊涂了。本周我开始学习如何为页面创建表单并通过AJAX提交表单。该页面是一个模板,我已经研究了两种处理方法。一种是通过重定向到PHP,例如:<form action=\"<?php echo get_template_directory_uri() . \"/validation.php\"; ?>\" id=\"contactForm\"> </form> 在阅读