Я хочу иметь возможность брать ключи/значения из cookie и использовать их для связывания модели.
Вместо того, чтобы создавать пользовательский ModelBinder, я считаю, что DefureModelBinder хорошо работает вне окна, и лучший способ выбрать, откуда берутся значения, - это установить используемый им IValureProvider.
Для этого я не хочу создавать настраиваемый GroupProvireFactory и связывать его глобально, потому что я хочу, чтобы этот GroupProvider использовался только в определенном методе действия.
Я построил атрибут, который делает это:
/// <summary>
/// Replaces the current value provider with the specified value provider
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class SetValueProviderAttribute : ActionFilterAttribute
{
public SetValueProviderAttribute(Type valueProviderType)
{
if (valueProviderType.GetInterface(typeof(IValueProvider).Name) == null)
throw new ArgumentException("Type " + valueProviderType + " must implement interface IValueProvider.", "valueProviderType");
_ValueProviderType = valueProviderType;
}
private Type _ValueProviderType;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
IValueProvider valueProviderToAdd = GetValueProviderToAdd();
filterContext.Controller.ValueProvider = valueProviderToAdd;
}
private IValueProvider GetValueProviderToAdd()
{
return (IValueProvider)Activator.CreateInstance(_ValueProviderType);
}
}
К сожалению, ModelBinder и его IValureProvider установлены ПЕРЕД ONActionExecuting (почему?????). Кто-нибудь еще придумал, как ввести пользовательский IValureProvider в DefureModelBinder без использования StartProvireFactory?
-121--1080178-Я использую WP_Query (довольно стандартный). Все отлично работает.
Однако у меня есть конкретное изменение, где, если пользователь вводит конкретное имя публикации в URL, поиск вернет только ту публикацию, которая соответствует этому post_name значению.
Смотрите мой код ниже с комментарием о том, что конкретная строка не работает.
<?php
$getPeople = array(
'post_type' => 'person',
'posts_per_page' => -1,
// I want this below to only return me the post with this specific value.
// This doesn't error, but doesn't work either.
// I know it seems counter-productive to a 'search' but this particular case requires it.
// This has a hard-coded value at the moment.
'post_name' => 'rebecca-atkinson',
'orderby' => 'meta_value',
'meta_key' => 'last-name',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'gender',
'value' => $theGender,
)
),
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'accent',
'field' => 'slug',
'terms' => $theAccent,
'operator' => 'IN',
),
array(
'taxonomy' => 'style',
'field' => 'slug',
'terms' => $theStyle,
'operator' => 'IN',
),
array(
'taxonomy' => 'age',
'field' => 'slug',
'terms' => $theAge,
'operator' => 'IN',
),
)
);
$myposts = new WP_Query($getPeople);
?>
Ваша помощь была бы очень признательна. Если бы я мог просто посмотреть, как искать на этой конкретной «пробке», то это было бы здорово.
Большое спасибо, Майкл.