web-dev-qa-db-ja.com

WP ジョブマネージャカテゴリドロップダウン。フィルタによるプレースホルダテキストの変更

私は何時間もグーグルしてきましたが、本当に有用な結果は得られませんでした。私はWP Job Managerを使用するサイトを持っています。このプラグインに付属の検索フィールドの1つはカテゴリドロップダウンリストです。

このテキストのプレースホルダーを「カテゴリを選択してください」から「セクターを選択してください」に変更します。

私はこの記事に遭遇しました: https://wordpress.org/support/topic/changing-placeholder-text-for-category-dropdown/

これができることを説明します。

以下のコードは、上記のリンクを参照するためにWP Job Manager Pluginから取得されたものです。

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

プレースホルダのテキストを変更するためのフィルタの作成方法についてのアドバイスがあれば幸いです。

クレイグ

1
Craig Watson

私が行ったテストに基づいて、プレースホルダー文字列 カテゴリを選択します… / submit_job_form_fieldsフィルタでフィルタすることはできませんが、それでもその文字列を変更する方法はあります。

テキストを変更する方法の1つは、プラグインのデフォルトのjob-filters.phpテンプレートを自分のもので上書きすることです。

デフォルトのテンプレート/wp-job-manager/templates/job-filters.phpをあなたのテーマにコピーしてください:/your-theme/job_manager/job-filters.php

両方のjob_manager_dropdown_categories()の呼び出しにplaceholder引数を追加して、テーマのjob-filters.phpのコピーを編集します。

<?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>

カテゴリを選択する… を変更する別の方法は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