web-dev-qa-db-fra.com

Si la fonction existe et que le tableau est rempli, écho fonction?

J'ai une fonction comme celle-ci:

<?php echo my_custom_function( array( 'category_url'=>'My Special Category' ) ); ?>

Il extrait les données de la "Ma catégorie spéciale" et les affiche. Je veux mettre une déclaration conditionnelle autour de celle-ci qui dit si, et seulement si, cette catégorie a des choses à afficher, à les afficher. Il y a plus d'un category_url alors l'envelopper avec une instruction if et utiliser simplement my_custom_function ne fonctionne pas à cause du tableau, il génère l'erreur: "Argument manquant 1".

Avez-vous une idée sur la façon de rendre cette fonction uniquement si elle existe ET si l’argument est égal à lui-même? PHP question noob. ;) Merci!!

2
RodeoRamsey

La fonction suivante vous montre des exemples de "meilleure pratique";)

Cela inclut la gestion des erreurs, la recherche de valeurs de tableau vides, l'analyse d'arguments d'entrée avec des valeurs par défaut, se soucie de savoir si vous souhaitez faire écho au résultat, etc. Vous avez même obtenu un filtre pour les valeurs par défaut de vos thèmes enfants. :)

La fonction dans votre fichier functions.php:

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

Notez que je n'ai pas testé la fonction, donc il pourrait y avoir des fautes de frappe et autres. Mais les erreurs vous mèneront.

Le cas d'utilisation:

$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 );
    }
}
2
kaiser