Support

Account

Home Forums ACF PRO acf/fields/taxonomy/query doesn't return the same result which get_terms() does

Solved

acf/fields/taxonomy/query doesn't return the same result which get_terms() does

  • First of all, big thank U for ur amazing plugin which has been saving my life!

    This time, I am trying to limit taxonomy field’s selection to only children. (or exclude parents)
    using acf/fields/taxonomy/query/name=(fieldname).

    Firstly, I can get the right result by the code below.

    
    	$args = array(
    		'hide_empty' => 0,
    		'fields' => 'ids',
    		);
    	$all_ids = get_terms( '(sometaxonomy)', $args );
    
    	$args = array(
    		'hide_empty' => 0,
    		'parent' => 0,
    		'fields' => 'ids',
    		);
    	$parent_ids = get_terms( '(sometaxonomy)', $args );
    
    	$args = array(
    		'hide_empty' => 0,
    		'include' => array_diff( $all_ids, $parent_ids ),
    		);
    	$children = get_terms( '(sometaxonomy)', $args );
    

    * note: ‘excluding parents’ did not work…

    But when I put it in a function which is hooked upto acf/fields/taxonomy/query/name=(fieldname) like below, I get “No matches found” on the screen.

    function myfunction( $args, $field, $post_id ) {
    
    	$args = array(
    		'hide_empty' => 0,
    		'fields' => 'ids',
    		);
    	$all_ids = get_terms( 'store_cat', $args );
    
    	$args = array(
    		'hide_empty' => 0,
    		'parent' => 0,
    		'fields' => 'ids',
    		);
    	$parent_ids = get_terms( 'store_cat', $args );
    
    	$args = array(
    		'hide_empty' => 0,
    		'include' => array_diff($all_ids, $parent_ids),
    		);
    
    	//var_dump( get_terms( 'store_cat', $args ) );
    
        return $args;
    
    }
    add_filter('acf/fields/taxonomy/query/name=storecat_tax', 'myfunction', 10, 3);

    then when I un-escape ‘var_dump’ line, I can check the result of get_terms() is correct in a browser.

    Does the hook modify the arg internaly?
    or
    Am I writing wrong code?

    I’ll appreciate any sort of help/advice.

    Thanks in advance!

    regards

  • Hi @hiroshi

    I’m afraid this is not possible because ACF will try to get the parents if the taxonomy is hierarchical so that it can show the terms in a tree layout. To fix it, you need to modify the core file. In “wp-content/plugins/advanced-custom-fields-pro/fields/taxonomy.php”, please search this line of code:

    // this will fail if a search has taken place because parents wont exist
    if( empty($args['search']) ) {

    Kindly change it to this one:

    // this will fail if a search has taken place because parents wont exist
    if( empty($args['search']) && $parent ) {

    After that, you can use this code to show only the child:

    function myfunction( $args, $field, $post_id ) {
    
    	$parents_args = array(
    		'hide_empty' => 0,
    		'parent' => 0,
    		'fields' => 'ids',
    		);
    	$parent_ids = get_terms( 'custom-taxonomy', $parents_args );
    	
    	$args['exclude'] = $parent_ids;
    
        return $args;
    
    }
    add_filter('acf/fields/taxonomy/query/name=taxonomy', 'myfunction', 10, 3);

    Also, could you please open a new ticket so this issue can be passed directly to the plugin author? You can open a new ticket here: https://support.advancedcustomfields.com/new-ticket.

    Thanks šŸ™‚

  • Hi James!

    Big thank you for your support as usual!

    I’m afraid this is not possible because ACF will try to get the parents if the taxonomy is hierarchical so that it can show the terms in a tree layout. To fix it, you need to modify the core file.

    I understand.

    Instead of modifying the core file,
    Do you think making new add-on based on the file is bad idea?

    PS
    As a temporary solution, giving up query solution & using acf/fields/taxonomy/result/ hook, I added some text such as ‘[not selectable]’ to each selection’s title , and I prevent a click on it by Jquery & css. (pink background row is not clickable in the attachment)

    PS2
    I don’t know how I should describe my issue as a ticket though…
    should it be a bug report? or request?

  • Hi @hiroshi,

    Thanks for the follow up.

    I am glad you found a workaround for this issue.

    Please send this to our support team as a feature request so that this can be brought to the attention of the plugin author.

    You can also share the link to this topic as a reference in your ticket!.

  • Hi @james

    I am gonna learn how to make add-on!
    (is there any tutorial for it?)

  • Hi @hiroshi

    If you want to create a new add-on (plugin), please check this page: https://codex.wordpress.org/Writing_a_Plugin.

    I’m afraid ACF doesn’t have a tutorial to create ACF add-on. But if you want to create a new field type like “child terms” (only shows child terms), for example, you can follow this guide: https://www.advancedcustomfields.com/resources/creating-a-new-field-type/.

    I hope this helps šŸ™‚

  • Hi @james

    Using starter kit which you introduced, I could make my own one!
    Thank you for your continuous support!
    I really appreciate it!

Viewing 7 posts - 1 through 7 (of 7 total)

The topic ‘acf/fields/taxonomy/query doesn't return the same result which get_terms() does’ is closed to new replies.