admin管理员组文章数量:1123943
I have a project website in which I am using Facewp to list custom posts on which I attached a custom field using ACF. I am using Extended ACF to make frontend forms to create/update those post types. The issue I am having is that the filters I used on the archive page for those posts are not working when I put the Acf/load-field('custom-field) on theme function.php to dynamically populate the choices on the ACF frontend form. The FW filters show: FacetWP was unable to auto-detect the post listing.
I added facewp=>true on facewp queries. I am thinking that a solution to get these two to work without interfering would be to keep acf/load_field functions off the pages where the FacetWP filters are used but I cannot figure that out since acf/load_field seems to only work when loaded only in function.php which immediately affect the FacetWP filters. Can anyone give an idea?
the following is the ACF/load_field :
function acf_admin_enqueue( $hook ) {
wp_enqueue_script( 'populate-awards', get_stylesheet_directory_uri() . '/assets/js/populate_grant_programs.js' );
wp_localize_script( 'populate-awards', 'pa_vars', array(
'pa_nonce' => wp_create_nonce( 'pa_nonce' ), // Create nonce which we later will use to verify AJAX request
)
);
}
//add_action( 'admin_enqueue_scripts', 'acf_admin_enqueue' );
add_action('wp_enqueue_scripts', 'acf_admin_enqueue');
// Return awards by grant project
function awards_by_grant_project( $selected_grant_project ) {
// Verify nonce
if( !isset( $_POST['pa_nonce'] ) || !wp_verify_nonce( $_POST['pa_nonce'], 'pa_nonce' ) ){
die('Permission denied');
}
// Get grant project var
$selected_grant_project = $_POST['grant_project'];
// Get field from options page
$org_post_id = get_post_id_for_organization();
$projects = organizations_grant_projects();
$grant_projects_listerr = $projects[ $org_post_id ];
//var_dump($grant_projects_listerr); die();
$grantproject_data = [];
foreach( $grant_projects_listerr as $grant_project ){
if( $grant_project[ 'project_title' ] == $selected_grant_project ){
$grantproject_data[ 'awards' ] = [ $grant_project[ 'award_number' ] ];
$grantproject_data[ 'grant_programs' ] = $grant_project[ 'grant_programs' ];
}
}
return wp_send_json($grantproject_data);
die();
}
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );```
The query for organization:
function organizations_grant_projects(){
$array_obj_of_orgs = array();
$args = [
'post_type' => 'organizations',
'meta_key' => 'grant_projects_for_directory',
'posts_per_page' => -1,
'post_status' => 'publish',
'orderby' => 'post_title',
'order' => 'ASC'
];
$org_query = new WP_Query($args);
if ( $org_query->have_posts() ) :
while ( $org_query->have_posts() ): $org_query->the_post();
if( have_rows('grant_projects_for_directory') ):
while( have_rows('grant_projects_for_directory' ) ) : the_row();
$array_of_grant_project[] = ['project_title' => get_sub_field('project_title'), 'award_number' => get_sub_field('list_of_award_numbers')[0] ['award_number'] ?? '', 'grant_programs' => get_sub_field('grant_programs')?? ''];
endwhile;
endif;
$array_obj_of_orgs[get_the_ID()] = $array_of_grant_project;
endwhile;
wp_reset_postdata();
endif;
wp_reset_query();
return $array_obj_of_orgs;
}
Here is the link to the website filter pages: faceWp filter directory page and facewp filter library page.
if anyone would be willing to take a look I can share the admin access.
I have a project website in which I am using Facewp to list custom posts on which I attached a custom field using ACF. I am using Extended ACF to make frontend forms to create/update those post types. The issue I am having is that the filters I used on the archive page for those posts are not working when I put the Acf/load-field('custom-field) on theme function.php to dynamically populate the choices on the ACF frontend form. The FW filters show: FacetWP was unable to auto-detect the post listing.
I added facewp=>true on facewp queries. I am thinking that a solution to get these two to work without interfering would be to keep acf/load_field functions off the pages where the FacetWP filters are used but I cannot figure that out since acf/load_field seems to only work when loaded only in function.php which immediately affect the FacetWP filters. Can anyone give an idea?
the following is the ACF/load_field :
function acf_admin_enqueue( $hook ) {
wp_enqueue_script( 'populate-awards', get_stylesheet_directory_uri() . '/assets/js/populate_grant_programs.js' );
wp_localize_script( 'populate-awards', 'pa_vars', array(
'pa_nonce' => wp_create_nonce( 'pa_nonce' ), // Create nonce which we later will use to verify AJAX request
)
);
}
//add_action( 'admin_enqueue_scripts', 'acf_admin_enqueue' );
add_action('wp_enqueue_scripts', 'acf_admin_enqueue');
// Return awards by grant project
function awards_by_grant_project( $selected_grant_project ) {
// Verify nonce
if( !isset( $_POST['pa_nonce'] ) || !wp_verify_nonce( $_POST['pa_nonce'], 'pa_nonce' ) ){
die('Permission denied');
}
// Get grant project var
$selected_grant_project = $_POST['grant_project'];
// Get field from options page
$org_post_id = get_post_id_for_organization();
$projects = organizations_grant_projects();
$grant_projects_listerr = $projects[ $org_post_id ];
//var_dump($grant_projects_listerr); die();
$grantproject_data = [];
foreach( $grant_projects_listerr as $grant_project ){
if( $grant_project[ 'project_title' ] == $selected_grant_project ){
$grantproject_data[ 'awards' ] = [ $grant_project[ 'award_number' ] ];
$grantproject_data[ 'grant_programs' ] = $grant_project[ 'grant_programs' ];
}
}
return wp_send_json($grantproject_data);
die();
}
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );
add_action( 'wp_ajax_awards_by_grant_project', 'awards_by_grant_project' );```
The query for organization:
function organizations_grant_projects(){
$array_obj_of_orgs = array();
$args = [
'post_type' => 'organizations',
'meta_key' => 'grant_projects_for_directory',
'posts_per_page' => -1,
'post_status' => 'publish',
'orderby' => 'post_title',
'order' => 'ASC'
];
$org_query = new WP_Query($args);
if ( $org_query->have_posts() ) :
while ( $org_query->have_posts() ): $org_query->the_post();
if( have_rows('grant_projects_for_directory') ):
while( have_rows('grant_projects_for_directory' ) ) : the_row();
$array_of_grant_project[] = ['project_title' => get_sub_field('project_title'), 'award_number' => get_sub_field('list_of_award_numbers')[0] ['award_number'] ?? '', 'grant_programs' => get_sub_field('grant_programs')?? ''];
endwhile;
endif;
$array_obj_of_orgs[get_the_ID()] = $array_of_grant_project;
endwhile;
wp_reset_postdata();
endif;
wp_reset_query();
return $array_obj_of_orgs;
}
Here is the link to the website filter pages: faceWp filter directory page and facewp filter library page.
if anyone would be willing to take a look I can share the admin access.
Share Improve this question edited Mar 19, 2024 at 2:31 Pat J 12.3k2 gold badges28 silver badges36 bronze badges asked Mar 18, 2024 at 20:46 user55953 Asapuser55953 Asap 113 bronze badges 2- You should really be asking FacetWP and ACF these questions as their code is proprietary and they're third parties which means their plugins don't necessarily work the same way WP does. WPSE is for WordPress specific development questions - these plugins have paid tiers and they provide support for stuff like this. – Tony Djukic Commented Mar 26, 2024 at 1:42
- Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. – Community Bot Commented Mar 26, 2024 at 1:42
1 Answer
Reset to default 1I thank you for taking a look at my issue if you did. I was able to get the issue resolved thanks to FaceWp support team. What I realized is that when you are usind facetwp plugin, and you are having an issue with filters not working when the refresh ajax is fired, just add a nonce to ajax, for some reason mine was failing.
Note that the main reason is for authentication described here. This resolved the issue I was having.
/*
* Authentication for facet
* Please note that caching may interfere with the NONCE,
* causing AJAX requests to fail. Please DISABLE CACHING for facet pages,
* or set the cache expiration to < 12 hours!
*/
add_action( 'wp_footer', function() {
?>
<script>
document.addEventListener('facetwp-loaded', function() {
if (! FWP.loaded) { // initial pageload
FWP.hooks.addFilter('facetwp/ajax_settings', function(settings) {
settings.headers = { 'X-WP-Nonce': FWP_JSON.nonce };
return settings;
});
}
});
</script>
<?php
}, 100 );
本文标签:
版权声明:本文标题:filters - FacetWP was unable to auto-detect the post listing : Having an issue with ACF load choices causing FacetWP error 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736608162a1945377.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论