Удалить парк постоянных ссылок из списка WP Job Manager - PullRequest
2 голосов
/ 22 января 2020

У меня есть сайт вакансий, который размещает вакансии по следующему URL:

https://www.jarsolutions.co.uk/job/housing-solutions-officer-2/

Это из плагина WP Job Manager, и я пытаюсь просто удалить / job / part, чтобы он выглядел так:

https://www.jarsolutions.co.uk/housing-solutions-officer-2/

Беда в том, что если я удалю его из настроек постоянных ссылок и уйду если поле пустое, оно заполняется значением по умолчанию / jobs /.

Я нашел эту функцию, которая позволяет мне изменять ее на что угодно, НО я не могу найти, как настроить ее, чтобы полностью от нее избавиться или изменить ее на ничто ...

function change_job_listing_slug( $args ) {
  $args['rewrite']['slug'] = _x( 'careers', 'Job permalink - resave permalinks after changing this', 'job_manager' );
  return $args;
}

add_filter( 'register_post_type_job_listing', 'change_job_listing_slug' );

Этот фрагмент кода с их собственного веб-сайта: https://wpjobmanager.com/document/tutorial-changing-the-job-slugpermalink/, где он также предоставляет фрагменты кода, которые добавляют элементы в URL-адрес ... но, опять же, он не дает никакой информации на удаление вещей из URL.

Если бы кто-нибудь мог указать мне правильное направление, это действительно помогло бы.

Спасибо:)

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Вот как вы можете удалить настраиваемые слагы таксономии (« job ») из терминов URL:

Вот основная часть кода, которую вы можете вставить в текущую тему functions. php, только не забудьте изменить имена / слагы таксономии в каждой функции на ваши собственные значения.

add_filter('request', 'rudr_change_term_request', 1, 1 );

function rudr_change_term_request($query){

    $tax_name = 'product_cat'; // specify you taxonomy name here, it can be also 'category' or 'post_tag'

    // Request for child terms differs, we should make an additional check
    if( $query['attachment'] ) :
        $include_children = true;
        $name = $query['attachment'];
    else:
        $include_children = false;
        $name = $query['name'];
    endif;


    $term = get_term_by('slug', $name, $tax_name); // get the current term to make sure it exists

    if (isset($name) && $term && !is_wp_error($term)): // check it here

        if( $include_children ) {
            unset($query['attachment']);
            $parent = $term->parent;
            while( $parent ) {
                $parent_term = get_term( $parent, $tax_name);
                $name = $parent_term->slug . '/' . $name;
                $parent = $parent_term->parent;
            }
        } else {
            unset($query['name']);
        }

        switch( $tax_name ):
            case 'category':{
                $query['category_name'] = $name; // for categories
                break;
            }
            case 'post_tag':{
                $query['tag'] = $name; // for post tags
                break;
            }
            default:{
                $query[$tax_name] = $name; // for another taxonomies
                break;
            }
        endswitch;

    endif;

    return $query;

}


add_filter( 'term_link', 'rudr_term_permalink', 10, 3 );

function rudr_term_permalink( $url, $term, $taxonomy ){

    $taxonomy_name = 'product_cat'; // your taxonomy name here
    $taxonomy_slug = 'product_cat'; // the taxonomy slug can be different with the taxonomy name (like 'post_tag' and 'tag' )

    // exit the function if taxonomy slug is not in URL
    if ( strpos($url, $taxonomy_slug) === FALSE || $taxonomy != $taxonomy_name ) return $url;

    $url = str_replace('/' . $taxonomy_slug, '', $url);

    return $url;
}

И не забудьте о 301 перенаправлении со старых URL, это требуется для вашего сайта SEO.

add_action('template_redirect', 'rudr_old_term_redirect');

function rudr_old_term_redirect() {

    $taxonomy_name = 'product_cat';
    $taxonomy_slug = 'product_cat';

    // exit the redirect function if taxonomy slug is not in URL
    if( strpos( $_SERVER['REQUEST_URI'], $taxonomy_slug ) === FALSE)
        return;

    if( ( is_category() && $taxonomy_name=='category' ) || ( is_tag() && $taxonomy_name=='post_tag' ) || is_tax( $taxonomy_name ) ) :

            wp_redirect( site_url( str_replace($taxonomy_slug, '', $_SERVER['REQUEST_URI']) ), 301 );
        exit();

    endif;

}

Код был протестирован с различными иерархическими и неиерархическими таксономиями и прекрасно работает с настройками этой постоянной ссылки.

1 голос
/ 28 января 2020

С сайта автора плагина, на который вы ссылались, я замечаю, что на нем написано:

Примечание. Начиная с версии WP7 Manager Job Manager, постоянные ссылки на задания можно изменить в меню «Настройки» -> «Постоянные ссылки» под Необязательный раздел.

Для предыдущих версий WP Job Manager, пожалуйста, обратитесь к руководству ниже. Спасибо!

Именно здесь перечислены семь различных примеров кода.

Играя с этим сам, я не могу заставить работать ни один из примеров кода (они ломаются странно пути).

Так что я предполагаю, что если вы работаете с версией после 1.27.0, то эти примеры кода больше не работают.

Я попытался поиграться с некоторыми правилами перезаписи, чтобы удалить / job из URL, но проблема в том, что все в плагине ищет ключевое слово (по умолчанию: job), по которому он будет искать контент.

Если он будет удален, WordPress будет ожидать, что URL должен быть Page. Его можно удалить, но это требует нетривиальных усилий.

Лучше всего либо отправить заявку в службу поддержки с WP Job Manager и надеяться, что они добавят ее в свою дорожную карту, либо оплатить плагин такой разработчик, как я, чтобы написать код, необходимый, чтобы позволить вам сделать это.

0 голосов
/ 31 января 2020

Чтобы удалить «job /» из URL, необходимо выполнить следующие шаги

Шаг 1: Измените настройку Постоянной ссылки на «Имя публикации» Шаг 2: Создайте работу как «Post»

Если вы не хотите создавать в Post, вы не можете удалить 'job /' из URL, если вы не добавите 'job-' в качестве префикса в вашем URL (https://www.jarsolutions.co.uk/job-housing-solutions-officer-2/)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...