最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

Query a custom taxonomy in a function to create an csv file

matteradmin9PV0评论

I a problem with getting the query for custom taxonomy to work in this function. The $filter is filled with data but the get_posts() does not use it? The query works without the tax_query and there are: custom posts with the correct taxonomy(list)... want am I missing?

add_action( 'restrict_manage_posts', 'add_export_button' );
function add_export_button() {
    $screen = get_current_screen();

if (isset($screen->parent_file) && ('edit.php?post_type=certificate'==$screen->parent_file)) {
        ?>
        <input type="submit" name="export_all_posts" id="export_all_posts" class="button button-primary" value="Export All Posts">
        <script type="text/javascript">
            jQuery(function($) {
                $('#export_all_posts').insertAfter('#post-query-submit');
            });
        </script>
        <?php
    }
}

add_action( 'init', 'func_export_all_posts' );
function func_export_all_posts() {
    if(isset($_GET['export_all_posts'])) {
        if(isset($_GET['list'])) {
            $filter =  strval($_GET['list']);
        };
        $arg = array(
                'post_type' => 'certificate',
                'post_status' => 'publish',
                'posts_per_page' => -1,
                'tax_query' => array(
                    array(
                        'taxonomy' => 'list',
                        'field'    => 'slug',
                        'terms'    => $filter ,
                    )
                    ),
            );

        global $post;
        $arr_post = get_posts($arg);

        if ($arr_post) {

        header('Content-type: text/csv');
        header('Content-Disposition: attachment; filename="wp.csv"');
        header('Pragma: no-cache');
        header('Expires: 0');

        $file = fopen('php://output', 'w');

        fputcsv($file, array('Post Title', 'URL'));

            foreach ($arr_post as $post) {
                setup_postdata($post);
                fputcsv($file, array(get_the_title(), get_the_permalink()));
            }

            exit();
        }
    }
}

I a problem with getting the query for custom taxonomy to work in this function. The $filter is filled with data but the get_posts() does not use it? The query works without the tax_query and there are: custom posts with the correct taxonomy(list)... want am I missing?

add_action( 'restrict_manage_posts', 'add_export_button' );
function add_export_button() {
    $screen = get_current_screen();

if (isset($screen->parent_file) && ('edit.php?post_type=certificate'==$screen->parent_file)) {
        ?>
        <input type="submit" name="export_all_posts" id="export_all_posts" class="button button-primary" value="Export All Posts">
        <script type="text/javascript">
            jQuery(function($) {
                $('#export_all_posts').insertAfter('#post-query-submit');
            });
        </script>
        <?php
    }
}

add_action( 'init', 'func_export_all_posts' );
function func_export_all_posts() {
    if(isset($_GET['export_all_posts'])) {
        if(isset($_GET['list'])) {
            $filter =  strval($_GET['list']);
        };
        $arg = array(
                'post_type' => 'certificate',
                'post_status' => 'publish',
                'posts_per_page' => -1,
                'tax_query' => array(
                    array(
                        'taxonomy' => 'list',
                        'field'    => 'slug',
                        'terms'    => $filter ,
                    )
                    ),
            );

        global $post;
        $arr_post = get_posts($arg);

        if ($arr_post) {

        header('Content-type: text/csv');
        header('Content-Disposition: attachment; filename="wp.csv"');
        header('Pragma: no-cache');
        header('Expires: 0');

        $file = fopen('php://output', 'w');

        fputcsv($file, array('Post Title', 'URL'));

            foreach ($arr_post as $post) {
                setup_postdata($post);
                fputcsv($file, array(get_the_title(), get_the_permalink()));
            }

            exit();
        }
    }
}
Share Improve this question asked Dec 9, 2018 at 13:38 JesperJesper 116 bronze badges 4
  • Not sure it would affect anything, but don't think you need that global $post in there as you're querying the posts to the $arr_post array – Tim Hallman Commented Dec 9, 2018 at 19:26
  • Other than that, perhaps try adding 'operator' => 'IN' to your tax_query array. – Tim Hallman Commented Dec 9, 2018 at 19:27
  • Actually, wrap your 'terms' in an array, like this 'terms' => array($filters). I believe that is your problem. – Tim Hallman Commented Dec 9, 2018 at 19:30
  • Thank you very much for your reply, Tim. I have now tried: 'operator' => 'IN' and to place the terms in an array and the drop the "global $post". But nothing seems to work when making the query for custom taxonomy. – Jesper Commented Dec 10, 2018 at 9:50
Add a comment  | 

2 Answers 2

Reset to default 0

I'm fairly sure you just need to pass an array for terms like this:

$arg = array(
     'post_type' => 'certificate',
     'post_status' => 'publish',
     'posts_per_page' => -1,
     'tax_query' => array(
          array(
               'taxonomy' => 'list',
               'field'    => 'slug',
               'terms'    => array($filter)
           )
      ),
);

The problem was that I used the toolset plugin to generate the taxonomy which caused some priority confusion. Adding this to my functions.php solved the problem:

remove_action('init', 'func_export_all_posts');
add_action('init', 'func_export_all_posts', 99);

Ref: https://toolset/forums/topic/wp_query-does-not-work-with-taxonomy-at-the-backend

Post a comment

comment list (0)

  1. No comments so far