If function exists, and array is met, echo function?

The following function shows you some “best practice” example 😉

It includes error handling, checking for emtpy array values, parsing input args with defaults, cares about if you want to echo the result, etc. You even got a filter for your child themes defaults. 🙂

The function in your functions.php file:

function wpse15886_check_cat( $args = array( 'cat_url', 'other_args_for_the_output', 'echo' => false ) )
{
    // Abort if no 'cat_url' argument was given
    if ( ! isset( $args['cat_url'] ) )
        $error = __( 'You have to specify a category slug.' );

    // check if the category exists
    $given_cat = get_category_by_slug( $args['cat_url'] );

    if ( empty( $given_cat ) )
        $error = sprintf( __( 'The category with the slug %1$s does not exist.' ), $args['cat_url'] );

    // check if we got posts for the given category
    $the_posts = get_posts( array( 'category' => $args['cat_url'] ) );

    if ( empty( $the_posts ) )
        $error = __( 'No posts were found for the given category slug.' );

    // error handling - generate the output
    $error_msg = new WP_Error( __FUNCTION__, $error );
    if ( is_wp_error( $error_msg ) ) 
    {
        ?>
            <div id="error-<?php echo $message->get_error_code(); ?>" class="error-notice">
                <strong>
                    <?php echo $message->get_error_message(); ?>
                </strong>
            </div>
        <?php 
        // abort
        return;
    }

    // Set some defaults
    $defaults = array(
         'key a' => 'val a'
        ,'key a' => 'val a'
        ,'key a' => 'val a'
    );
    // filter defaults
    $defaults = apply_filters( 'filter_check_cats', $defaults ); 

    // merge defaults with input arguments
    $args = wp_parse_args( $args, $defaults );
    extract( $args, EXTR_SKIP );

    // >>>> build the final function output
    $output = $the_posts;
    $output = __( 'Do what ever you need to do here.' );
    $output = sprintf( __( 'Manipulating some of the parsed %1$s for example.' ), $args['other_args_for_the_output'] );
    // <<<< end build output

    // just return the value for further modification
    if ( $args['echo'] === false )
        return $output;

    return print $output;
} 

Note that i haven’t tested the function, so there might be some misstypings and else. But errors will lead you.

The usecase:

$my_cats = array(
     'cat_slug_a' 
    ,'cat_slug_b' 
    ,'cat_slug_c'
);

if ( function_exists( 'wpse15886_check_cat' ) )
{
    foreach ( $my_cats as $cat )
    {
        $my_cats_args = array(
             $cat
            ,'other_args_for_the_output' // this could also be another array set in here
            ,'echo' => true
        );

        // trigger the function
        wpse15886_check_cat( $my_cats_args );
    }
}

Leave a Comment