- This topic has 17 replies, 4 voices, and was last updated 2 years, 3 months ago by Elvin.
-
AuthorPosts
-
November 30, 2021 at 7:00 am #2031369Paul
I have 2 element rules that should be applicable to the following page but do not seem to work:
https://www.suddencardiacarrestuk.org/faq-category/travelling/The first rule “Breadcrumb” is to disable the yoast breadcrumb from the page.
The second is to add the “Faq breadcrumb” to the page.These rules work on the individual faq question page, such as
https://www.suddencardiacarrestuk.org/faq-questionimplantable-devices/are-there-any-medications-that-defibrillator-patients-should-not-take/I don’t know if it’s to do with the way the faq plugin creates the category pages or not, but when I set the rules up I have to specify it as
“FAQ Question FAQ Categories” and on the right option select an actual category, such as “Treatment” or “Travelling”. Ideally I’d like to be able to just say that it applies to all the category pages (as per the FAQ Question rules where I have an option “All FAQ Question”) but at the moment I would have to create a rule for every category that I create – which doesn’t;t seem right. However, I’m not sure why this is, the way the faq plugin is designed or the way generatepress is.Thanks
November 30, 2021 at 7:35 am #2031439DavidStaffCustomer SupportHi there,
that FAQ page isn’t a category archive, their using Page hierarchies.
You can use the snippet here to make an Element apply to a All Children of the given Parent page.November 30, 2021 at 7:50 am #2031648Paulok, how do I add this?
Is it a hook?
November 30, 2021 at 7:56 am #2031718DavidStaffCustomer SupportIts PHP – this doc explains how to add:
November 30, 2021 at 10:45 am #2032018PaulOK thanks. I already had Code Snippets installed and I added the following:
add_filter( 'generate_element_display', function( $display, $element_id ) { global $post; if ( 13084 === $element_id && ( is_page() && $post->post_parent == '8971' ) ) { $display = true; } return $display; }, 10, 2 );
Where I think 13084 is the element id (I assume the post Id when editing the element) and 8971 is the page id (again, from the URL when editing).
I activated it and set it to run only on the frontend.
The element Display Rules are set with the Location as “FAQ Question->All FAQ Questions” and “Page->FAQ”
Not sure if this is how you meant but it doesn’t work for me.
November 30, 2021 at 11:48 am #2032113YingStaffCustomer SupportHi Paul,
Can you try this one:
add_filter( 'generate_element_display', function( $display, $element_id ) { global $post; if ( 13084 === $element_id && ( is_page( 8971 )) ) { $display = true; } return $display; }, 10, 2 );
Let me know 🙂
November 30, 2021 at 12:14 pm #2032148PaulHi Ying,
Unfortunately, this didn’t work either.
Paul
November 30, 2021 at 12:53 pm #2032204YingStaffCustomer SupportThe FAQ category pages and the FAQ pages are using the same ID, I don’t see parent-child relationship between them either.
It’s a really strange structure.
How did you add this breadcrumbs?
https://www.screencast.com/t/CSd1AyO4DpNovember 30, 2021 at 1:36 pm #2032247PaulI don’t know about the parent/child relationship, it’s what David suggested.
I have a hook that outputs the yoast breadcrumbs, but that’s not what I want for the category pages. I’ve achieved what I want on the other FAQ pages, i.e. using the FAQ breadcrumb
November 30, 2021 at 2:09 pm #2032274YingStaffCustomer SupportI have a hook that outputs the yoast breadcrumbs
What’s the location setting in this hook element?
November 30, 2021 at 2:46 pm #2032334PaulIt’s for the entire site but there are the following exclusions
front page
page -> faq all
faq question ->all faq questions
page -> faqand for the faq pages it should show a replacement faq breadcrumb with the following location rules…
faq question -> all faq questions
page -> faqNovember 30, 2021 at 5:28 pm #2032479ElvinStaffCustomer SupportHi there,
I don’t know if it’s to do with the way the faq plugin creates the category pages or not,
You may be onto something with this. The page isn’t a archive page so we can’t use is_archive() and is_category(). The page source tells it’s a page (or atleast using a page template) but is_page() isn’t working.
Can you ask the plugin’s developer what condition they use for generating category pages?
We can use that condition for the display rule filter. 🙂
December 4, 2021 at 7:42 am #2038144PaulI had a reply back from the FAQ plugin developer…
“The “main” page it’s just a regular wp page (post_type=”page”) with the [cm_faq] shortcode
The category page, is, actually, the same entity (same wp page), but with rewritten global page query
We use parse_query hook for that. Look for pre_get_posts() method In plugin code to see which parameters were changed by CMFAQ pluginThe question page it’s just a regular single post page”
I think this is the method they are referring to…
public static function pre_get_posts(&$wp_query_ref) { global $wp_query; if (is_admin()) { return; } $is_tax = $wp_query_ref->is_main_query() && (is_tax('cmfaq_category') || is_tax('cmfaq_tag')); $is_search = $wp_query_ref->is_search() && get_query_var('post_type') == 'cmfaq_question'; if ($is_tax || $is_search) { $wp_query_ref->set('order', Options::get_option('cmfaq_order')); $wp_query_ref->set('orderby', Options::get_option('cmfaq_orderby')); if ( Options::get_option('cmfaq_orderby') == 'voting' ) { $wp_query_ref->set('meta_key', 'cmfaq_rating'); $wp_query_ref->set('orderby', array('meta_value_num' => Options::get_option('cmfaq_order'), 'title' => 'ASC')); } if ($is_tax && is_tax('cmfaq_category')) { new TermOrder(); $arr_id = (array) get_term_meta($wp_query_ref->queried_object_id, 'cmfaq_list'); if (count($arr_id)) { $terms = get_terms('cmfaq_list', array('include' => $arr_id, 'hide_empty' => FALSE)); foreach ((array) $terms as $term) { if (!static::$homePageId) { static::$homePageId = intval(get_term_meta($term->term_id, 'cmfaq_page_id', TRUE)); } } } } if ($is_tax && is_tax('cmfaq_tag')) { new TermOrder(); $terms = (array) get_posts(array( 'post_type' => 'cmfaq_question', 'tax_query', array( array( 'taxonomy' => 'cmfaq_tag', 'field' => 'term_id', 'terms' => $wp_query_ref->queried_object_id ) ) )); $arr_id = array(); foreach ($terms as $term) { foreach ((array) wp_get_post_terms($term->ID, 'cmfaq_category', array('fields' => 'ids')) as $cat_id) { $arr_id = array_merge($arr_id, (array) get_term_meta($cat_id, 'cmfaq_list')); } } $arr_id = array_unique($arr_id); if (count($arr_id)) { $terms = get_terms('cmfaq_list', array('include' => $arr_id, 'hide_empty' => FALSE)); foreach ((array) $terms as $term) { if (!static::$homePageId) { static::$homePageId = intval(get_term_meta($term->term_id, 'cmfaq_page_id', TRUE)); } } } } if ($is_search) { $cmfaq_list_id = intval(filter_input(INPUT_GET, 'cmfaq_list_id')); if ($cmfaq_list_id) { static::$homePageId = intval(get_term_meta($cmfaq_list_id, 'cmfaq_page_id', TRUE)); $wp_query_ref->set('tax_query', array( array( 'taxonomy' => 'cmfaq_category', 'field' => 'term_id', 'terms' => static::getCategoryIdArrForListId($cmfaq_list_id), ) )); } } if (!static::$homePageId) { static::$homePageId = Options::get_option('cmfaq_page_id', -1); } if (static::$homePageId && get_post(static::$homePageId) && ($is_tax || $is_search)) { self::$wp_query_taxonomy = $wp_query; self::$wp_query_taxonomy->set('posts_per_page', -1); self::$wp_query_taxonomy->set('nopaging', true); self::$wp_query_page = new \WP_Query(array('page_id' => static::$homePageId)); } } }
Hopefully this makes sense to you?
December 5, 2021 at 4:40 pm #2039432ElvinStaffCustomer SupportCan you try this?
add_filter( 'generate_element_display', function( $display, $element_id ) { $cmfaq_term = 75; $cmfaq_cat = CMFAQ_Base::$wp_query_taxonomy->queried_object_id; if ( 389970 === $element_id && $cmfaq_term === $cmfaq_cat ) { $display = true; } return $display; }, 10, 2 );
Change the value of
$cmfaq_term = 75;
to the ID of the CM FAQ category term you’re trying to display the GP Element on.You’ll find the CM FAQ category term on the URL bar when you’re editing the category as shown here – https://share.getcloudapp.com/Kou7bQPr
December 8, 2021 at 3:57 am #2042211PaulThanks, but the trouble with that is, I’d have to specify and update the code for every category I have, which may change in time.
However, I did come up with the following which seems to work…
add_filter( 'generate_element_display', function( $display, $element_id ) { if ( 13110 === $element_id && strpos($_SERVER['REQUEST_URI'], 'faq-category') !== false ) { $display = true; } return $display; }, 10, 2 ); add_filter( 'generate_element_display', function( $display, $element_id ) { if ( 13110 === $element_id && strpos($_SERVER['REQUEST_URI'], 'faq-tag') !== false ) { $display = true; } return $display; }, 10, 2 );
-
AuthorPosts
- You must be logged in to reply to this topic.