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 );
}
}