Вопрос к шаблону с несколькими типами записей - PullRequest
1 голос
/ 25 января 2011

Итак, у меня есть сайт с примерно 6 пользовательскими типами сообщений. Три из этих типов сообщений привязаны к одной пользовательской таксономии.

Я хотел бы иметь возможность составить list_cats на боковой панели и выдавать URL-адрес, например .. /% post_type% /% taxonomy% / , и заставить вас перейти к таксономия-% таксономия% .php шаблона и возвращает только результаты % post_type% .

Я могу создать условное выражение, которое будет считывать текущий % post_type% и один раз правильно стилизовать его в файле taxonomy-% taxonomy% .php .Мне нужно руководство по наиболее эффективному способу изменения URL-адреса для передачи % post_type% в запрос.

Заранее спасибо.Я искал пару дней без четкого ответа.

Итак, вот мои слабые попытки найти решение, но они являются одной большой ошибкой Это основано на обсуждении, найденном в rlmseo.com и ответ здесь.

Попытка добавить тип записи в переменную для использования в Запросе:

практикаэто таксономия.Попытка добавить переменную, которую я могу использовать для фильтрации таксономии по типу записи в taxonomy-practice-Area.php

function add_query_vars($aVars) {
    $aVars[] = "cust_pt_var";    // represents the name of the custom post type as shown in the URL
    return $aVars;
}

// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');      

function add_rewrite_rules($aRules) {
    $aNewRules = array('practice-areas/([^/]+)/pt/([^/]+)/?$' => 'index.php?practice-areas=$matches[1]&cust_pt_var=$matches[2]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules')

Попытка передать переменные запроса в перезаписи

Попытка добавить типы запросов (портфолио и клиенты), а также термин таксономии практических областей в запрос при перезаписи.

function add_rewrite_rules($aRules) {
    $aNewRules = array('portfolio/practice-areas/([^/]+)/?$' => 'index.php?post_type=portfolio&practice-areas=$matches[1]');
    $aNewRules = array('clients/practice-areas/([^/]+)/?$' => 'index.php?post_type=clients&practice-areas=$matches[1]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules')

Ответы [ 2 ]

0 голосов
/ 27 января 2011

Хорошо, поэтому я все вместе переписал и перешел к решению $ _POST.Это работает очень хорошо, и в моем URL ничего не помоет.

Поместите на целевую страницу:

    <?php
    $myvar = $_POST['formVar'];
    query_posts($query_string . '&post_type='.$myvar );
    ?>

Поместите на исходную страницу:

<!-- The Form: Put this form somewhere on the page: -->

    <form method=post name="post_form" action="">
    <input type="hidden" name="formVar" value="">
    </form>


<!-- The URL: Here I am assigning the Destination URL to a variable.  This can be whatever you want the destination page to be. -->

    <?php                       
    $dest_url = get_bloginfo('url').'/practice-areas/'. $category->slug;
    ?>


<!-- The Link: Here we are assigning 'portfolio' to  'formVar' and setting the form 'action' to the $dest_url value. The title stuff is irrelevant here-->

    <a href="" onclick="document.post_form.formVar.value='portfolio'; document.post_form.action ='<?php $dest_url; ?>'; document.post_form.submit(); return false" title ="<?php sprintf( __( "View all posts in %s" ), $category->name ); ?>" >
0 голосов
/ 25 января 2011

Этого можно добиться, изменив правила перезаписи WP:

add_action( 'init', 'ss_permalinks' );
function ss_permalinks() {
    add_rewrite_rule(
        'page/remove/([^/]+)/?',
        'index.php?pagename=page&service=$matches[1]',
        'top'
);
}
add_filter( 'query_vars', 'ss_query_vars' );
function ss_query_vars( $query_vars ) {
    $query_vars[] = 'removeid';
    return $query_vars;
}

Это неполно, и вам нужно изменить целевой URL и само правило, но это основа. Повторно сохраните свои настройки постоянной ссылки один раз после внедрения. page - это фрагмент страницы, на который указывает пользователь при обращении к этому URL (в данном случае domain.com/page/remove/432), а $matches[1] должно быть числом после remove/ в URL. Этот номер доступен по переменной, указанной позже, $query_vars[] = 'removeid'; / '$ removeid' в шаблоне целевой страницы будет номером в URL, если он указан.

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