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