Какова альтернатива получению страницы по названию()?
Я пишу тему, в которой я хочу отображать информацию в нижнем колонтитуле, доступную только на странице шаблона. Я использовал get_page_by_title()
, который хорошо работает, если вы знаете, как будет называться страница, но, на мой взгляд, он не очень динамичен, невозможно предсказать, как пользователь назовет страницу в вашей теме.
В своем исследовании я нашел функцию под названием get_all_page_ids()
, которая возвращает численно индексированный массив идентификаторов с сайта. Эта функция была бы намного круче, если бы это был ассоциативный (или даже почтовый объект), но я отвлекся.
Я рассматривал возможность использования чего-то подобного:
$all_page_ids = get_all_page_ids();
foreach ($all_page_ids as $id) {
// get_post() {@link https://developer.wordpress.org/reference/functions/get_post/}
$post_object = get_post($id);
// preg_match() {@link http://php.net/manual/en/function.preg-match.php}
if(preg_match("/\b(contact)\b/i", $post_object->post_title)) {
// do something here
} else {
// for readability
continue;
}
}
Однако это все еще создает проблему необходимости знать, что пользователь выбрал слово контакт в своем названии. Что, если они создали страницу под названием "Войти в контакт", которая является их страницей контактов? Это сломалось бы.
Итак, короче говоря, мой вопрос касается наилучшей практики для дизайнеров тем. Является get_page_by_title()
лучшим способом получить идентификатор другой страницы, или есть способ объединить несколько функций/переменных, чтобы получить идентификатор другой страницы, не зная названия?
Или есть функции WordPress, которые выполняют такую тяжелую работу, или get_page_by_title()
является единственной близкой функцией? Я подозреваю, что есть более хитрый, но лучший способ сделать это, у меня просто нет никаких идей. Спасибо за любую помощь, которую вы можете оказать в этом.
2 answers
Если вы не навязываете заголовок и, очевидно, не знаете идентификатор, единственный способ сделать это - позволить пользователю выбрать, какую страницу использовать, обычно это делается на странице параметров темы, но может быть сделано в костюмере или даже в рамках редактирования страницы
Если ваша страница является шаблонной страницей, то вы можете использовать is_page_template($template_name)
В противном случае, как упоминал Марк, вам нужно создать опцию темы и предоставить пользователю решать.
Подробнее: https://codex.wordpress.org/Function_Reference/is_page_template
ОБНОВЛЕНИЕ
Я неправильно понял ваш вопрос. Вы можете получить все страницы, используя определенное имя шаблона, но опять же пользователь может создать более одной такой страницы с одним и тем же шаблоном, поэтому вы не уверены, какую из них выбрать выбирать.
$args = array(
'meta_key' => '_wp_page_template',
'meta_value' => 'page-about.php',
'post_type' => 'page'
);
$posts_array = get_posts( $args );
Еще одна идея состоит в том, чтобы самостоятельно создать свою страницу с кодом при активации темы/плагина, а затем сохранить идентификатор в качестве опции, но также предоставить пользователю возможность изменить страницу, если он/она захочет. Вот как WooCommerce работает со страницей магазина.
Опять же, я считаю, что подход Марка лучше и безопаснее.