web-dev-qa-db-fra.com

WP Liste des catégories de gestionnaire de tâches; Modifier le texte de substitution via le filtre

Je recherche Google pendant des heures sans résultat vraiment utile. J'ai un site qui utilise WP Job Manager. L'un des champs de recherche fournis avec ce plugin est une liste déroulante de catégories.

J'aimerais changer le caractère fictif de ce texte de "Choisissez une catégorie ..." à "Choisissez vos secteurs ..."

Je suis tombé sur ce post: https://wordpress.org/support/topic/changing-placeholder-text-for-category-dropdown/

Cela explique que cela peut être fait.

Le code ci-dessous est tiré du plug-in de gestionnaire de travaux WP pour référence avec le lien ci-dessus.

function job_manager_dropdown_categories( $args = '' ) {
    $defaults = array(
        'orderby'         => 'id',
        'order'           => 'ASC',
        'show_count'      => 0,
        'hide_empty'      => 1,
        'child_of'        => 0,
        'exclude'         => '',
        'echo'            => 1,
        'selected'        => 0,
        'hierarchical'    => 0,
        'name'            => 'cat',
        'id'              => '',
        'class'           => 'job-manager-category-dropdown ' . ( is_rtl() ? 'chosen-rtl' : '' ),
        'depth'           => 0,
        'taxonomy'        => 'job_listing_category',
        'value'           => 'id',
        'multiple'        => true,
        'show_option_all' => false,
        'placeholder'     => __( 'Choose a category…', 'wp-job-manager' ),
        'no_results_text' => __( 'No results match', 'wp-job-manager' ),
        'multiple_text'   => __( 'Select Some Options', 'wp-job-manager' )
    );

    $r = wp_parse_args( $args, $defaults );

    if ( ! isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ){
        $r['pad_counts'] = true;
    }

    // WPML & Polylang caching per language
    if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
        $r['lang'] = apply_filters( 'wpml_current_language', NULL );
    } elseif ( function_exists( 'pll_current_language' ) ) {
        $r['lang'] = pll_current_language();
    }

    extract( $r );

// Store in a transient to help sites with many cats
    $categories_hash = 'jm_cats_' . md5( json_encode( $r ) . WP_Job_Manager_Cache_Helper::get_transient_version( 'jm_get_' . $r['taxonomy'] ) );
    $categories      = get_transient( $categories_hash );

    if ( empty( $categories ) ) {
        $categories = get_terms( $taxonomy, array(
            'orderby'         => $r['orderby'],
            'order'           => $r['order'],
            'hide_empty'      => $r['hide_empty'],
            'child_of'        => $r['child_of'],
            'exclude'         => $r['exclude'],
            'hierarchical'    => $r['hierarchical']
        ) );
        set_transient( $categories_hash, $categories, DAY_IN_SECONDS * 30 );
    }

    $name       = esc_attr( $name );
    $class      = esc_attr( $class );
    $id         = $id ? esc_attr( $id ) : $name;

    $output = "<select name='" . esc_attr( $name ) . "[]' id='" . esc_attr( $id ) . "' class='" . esc_attr( $class ) . "' " . ( $multiple ? "multiple='multiple'" : '' ) . " data-placeholder='" . esc_attr( $placeholder ) . "' data-no_results_text='" . esc_attr( $no_results_text ) . "' data-multiple_text='" . esc_attr( $multiple_text ) . "'>\n";

    if ( $show_option_all ) {
        $output .= '<option value="">' . esc_html( $show_option_all ) . '</option>';
    }

    if ( ! empty( $categories ) ) {
        include_once( JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-category-walker.php' );

        $walker = new WP_Job_Manager_Category_Walker;

        if ( $hierarchical ) {
            $depth = $r['depth'];  // Walk the full depth.
        } else {
            $depth = -1; // Flat.
        }

        $output .= $walker->walk( $categories, $depth, $r );
    }

    $output .= "</select>\n";

    if ( $echo ) {
        echo $output;
    }

    return $output;
}

J'apprécierais tout conseil sur la façon de créer un filtre pour changer le texte d'espace réservé.

Craig

1
Craig Watson

Sur la base des tests que j'ai effectués, la chaîne de substitution Choisissez une catégorie… ne peut pas être filtrée avec le filtre submit_job_form_fields, mais il existe toujours des moyens de modifier cette chaîne.

Une façon de modifier le texte consiste à remplacer le modèle job-filters.php par défaut du plug-in par le vôtre.

Copiez le modèle par défaut, /wp-job-manager/templates/job-filters.php sur votre thème: /your-theme/job_manager/job-filters.php

Modifiez la copie de job-filters.php de votre thème en ajoutant l'argument placeholder aux deux appels de job_manager_dropdown_categories():

<?php wp_enqueue_script( 'wp-job-manager-ajax-filters' ); ?>

<?php do_action( 'job_manager_job_filters_before', $atts ); ?>

<form class="job_filters">
    <?php do_action( 'job_manager_job_filters_start', $atts ); ?>

    <div class="search_jobs">
        <?php do_action( 'job_manager_job_filters_search_jobs_start', $atts ); ?>

        <div class="search_keywords">
            <label for="search_keywords"><?php _e( 'Keywords', 'wp-job-manager' ); ?></label>
            <input type="text" name="search_keywords" id="search_keywords" placeholder="<?php esc_attr_e( 'Keywords', 'wp-job-manager' ); ?>" value="<?php echo esc_attr( $keywords ); ?>" />
        </div>

        <div class="search_location">
            <label for="search_location"><?php _e( 'Location', 'wp-job-manager' ); ?></label>
            <input type="text" name="search_location" id="search_location" placeholder="<?php esc_attr_e( 'Location', 'wp-job-manager' ); ?>" value="<?php echo esc_attr( $location ); ?>" />
        </div>

        <?php if ( $categories ) : ?>
            <?php foreach ( $categories as $category ) : ?>
                <input type="hidden" name="search_categories[]" value="<?php echo sanitize_title( $category ); ?>" />
            <?php endforeach; ?>
        <?php elseif ( $show_categories && ! is_tax( 'job_listing_category' ) && get_terms( 'job_listing_category' ) ) : ?>
            <div class="search_categories">
                <label for="search_categories"><?php _e( 'Category', 'wp-job-manager' ); ?></label>
                <?php if ( $show_category_multiselect ) : ?>
                    <?php job_manager_dropdown_categories( array( 'placeholder' => __( 'Choose a sector&hellip;', 'your-text-domain' ), 'taxonomy' => 'job_listing_category', 'hierarchical' => 1, 'name' => 'search_categories', 'orderby' => 'name', 'selected' => $selected_category, 'hide_empty' => false ) ); ?>
                <?php else : ?>
                    <?php job_manager_dropdown_categories( array( 'placeholder' => __( 'Choose a sector&hellip;', 'your-text-domain' ), 'taxonomy' => 'job_listing_category', 'hierarchical' => 1, 'show_option_all' => __( 'Any category', 'wp-job-manager' ), 'name' => 'search_categories', 'orderby' => 'name', 'selected' => $selected_category, 'multiple' => false ) ); ?>
                <?php endif; ?>
            </div>
        <?php endif; ?>

        <?php do_action( 'job_manager_job_filters_search_jobs_end', $atts ); ?>
    </div>

    <?php do_action( 'job_manager_job_filters_end', $atts ); ?>
</form>

<?php do_action( 'job_manager_job_filters_after', $atts ); ?>

<noscript><?php _e( 'Your browser does not support JavaScript, or it is disabled. JavaScript must be enabled in order to view listings.', 'wp-job-manager' ); ?></noscript>

Une autre méthode pour modifier le Choisissez une catégorie… texte consiste à utiliser le filtre gettext:

add_filter('gettext', 'wpse243242_change_wp_job_manager_text', 20, 3 );
function wpse243242_change_wp_job_manager_text( $translated_text, $untranslated_text, $domain ) {
    if ( 'wp-job-manager' !== $domain ) {
        return $translated_text;        
    }

    // make the changes to the text
    switch( $untranslated_text ) {
            // Multi category select
            case 'Choose a category&hellip;':
                $translated_text = __( 'Choose a sector&hellip;', 'text_domain' );
            break;

            // Single category select
            case 'Any category':
                $translated_text = __( 'Any sector', 'text_domain' );
            break;

            // add more items
     }

    return $translated_text;        
}
3
Dave Romsey