Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据其他选择的值筛选选择结果_Php_Ajax_Wordpress_Advanced Custom Fields - Fatal编程技术网

Php 如何根据其他选择的值筛选选择结果

Php 如何根据其他选择的值筛选选择结果,php,ajax,wordpress,advanced-custom-fields,Php,Ajax,Wordpress,Advanced Custom Fields,在我的WordPress主题中,我有一个名为Segments的自定义帖子类型,它包含两个自定义字段。我试图实现的是根据第一个字段的值进行第二个字段的搜索 第一个被称为,字段的类型是一个分类法,它将段post链接到排放分类法 第二个称为插曲,字段的类型是一个post_对象,它将片段post链接到插曲post类型 现在,我想要的是第二个字段,用于过滤与第一个字段的选定值处于相同发射中的片段 我遇到的问题是,如果不保存段,我无法获取第一个字段的值。以下是我尝试过的: add_filter('acf/f

在我的WordPress主题中,我有一个名为Segments的自定义帖子类型,它包含两个自定义字段。我试图实现的是根据第一个字段的值进行第二个字段的搜索

第一个被称为,字段的类型是一个分类法,它将段post链接到排放分类法

第二个称为插曲,字段的类型是一个post_对象,它将片段post链接到插曲post类型

现在,我想要的是第二个字段,用于过滤与第一个字段的选定值处于相同发射中的片段

我遇到的问题是,如果不保存段,我无法获取第一个字段的值。以下是我尝试过的:

add_filter('acf/fields/post_object/query/key=field_57503ed5193d6', array($this, 'show_episodes'), 10, 3);

/*
* Function to show episodes that are from the same program as the current segment.
*/
public function show_episodes($args, $field, $post_id){
    error_log('Post Id: ' . $post_id);
    error_log(json_encode(get_field_object('emission')));
    error_log(json_encode(get_field('emission', $post_id)));

    return $args;
}

当我为已经保存的段调用此函数时,它返回保存的发射值,这是合乎逻辑的,因为它是保存在数据库中的值。当我为一个新段调用它时,它不起作用,因为它没有保存在数据库中的值,因此,它返回null。每当我编辑保存段的发射值时,它仍然会返回旧的发射值,即数据库中的发射值。

我已经能够使用Ajax和PHP会话实现结果。以下是我所做的:

Javascript PHP 因此,当我们通过Ajax接收到actionfilter\u片段时,它调用PHP函数update\u filter\u scents

startSession函数用于检查会话是否已启动:

/*
* Function to start the session if it's not already started.
*/
protected function startSession(){
    if(session_status() != PHP_SESSION_ACTIVE)
        @session_start();
}
为了更新ACF调用的查询,我们需要另一个钩子来调用函数show\u:


不确定这是否是最简单的方法,但对我来说很有效。但是,如果有人有更好的解决方案,请随时告诉我

我已经能够使用Ajax和PHP会话实现这个结果。以下是我所做的:

Javascript PHP 因此,当我们通过Ajax接收到actionfilter\u片段时,它调用PHP函数update\u filter\u scents

startSession函数用于检查会话是否已启动:

/*
* Function to start the session if it's not already started.
*/
protected function startSession(){
    if(session_status() != PHP_SESSION_ACTIVE)
        @session_start();
}
为了更新ACF调用的查询,我们需要另一个钩子来调用函数show\u:

不确定这是否是最简单的方法,但对我来说很有效。但是,如果有人有更好的解决方案,请随时告诉我

/*
* Function to update the program id for the episodes filter.
*/
public function update_filter_episodes(){
    $this->startSession();
    if(isset($_POST['postId']) && isset($_POST['programId'])){
        $_SESSION['post-' . $_POST['postId'] . '-emission-id'] = $_POST['programId'];
        wp_send_json(true);
    }
    wp_send_json(false);
}
/*
* Function to start the session if it's not already started.
*/
protected function startSession(){
    if(session_status() != PHP_SESSION_ACTIVE)
        @session_start();
}
add_filter('acf/fields/post_object/query/key=field_57503ed5193d6', 'show_episodes', 10, 3);

/*
* Function to show episodes that are from the same show as the current segment.
*/
public function show_episodes($args, $field, $post_id){
    $this->startSession();

    $index = 'post-' . $post_id . '-emission-id';
    if(isset($_SESSION[$index]) && !empty($_SESSION[$index]))
        $args['tax_query'] = array(array('taxonomy' => 'category', 'terms' => $_SESSION[$index]));

    return $args;
}