1

I have been googling for hours with no really helpful outcome, I have a site that uses WP Job Manager. One of the search fields that comes with this plugin is a category drop-down list.

I would like to change the placeholder of this text from "Choose a category..." to "Choose your sectors..."

I came across this post: https://wordpress.org/support/topic/changing-placeholder-text-for-category-dropdown/

This explains it can be done.

The code below is taken from the WP Job Manager Plugin for reference with the above link.

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

I would appreciate any advice on how to create a filter to change the placeholder text.

Craig

3

Based on the testing that I did, the placeholder string Choose a category… cannot be filtered with the submit_job_form_fields filter, but there are still ways to change that string.

One way to alter the text is to override the plugin's default job-filters.php template with your own.

Copy the default template, /wp-job-manager/templates/job-filters.php over to your theme: /your-theme/job_manager/job-filters.php

Edit your theme's copy of job-filters.php by adding the placeholder argument to both calls to 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>

An alternative method of altering the Choose a category… text is to use the gettext filter:

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;        
}
  • 1
    Dave you are a true life saver! – Craig Watson Oct 19 '16 at 12:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.