Передача жестко закодированного идентификатора страницы/публикации в "получить публикацию"


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

$post = get_post( 5 );

Кто-то предположил, что это плохая практика. Почему это плохо и что пользователи должны делать вместо этого?

Author: Tom J Nowell, 2014-08-26

2 answers

Для начала давайте погрузимся в то, что есть 5 на самом деле. Это идентификатор поста. Но что такое ID в свою очередь? Это значение в строке таблицы MySQL, которое идентифицирует конкретную запись post.

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

Итак, во-первых, с этим связаны некоторые концептуальные проблемы. Это не содержание . Это не то, что пользователь создает, манипулирует или (в большинстве случаев) осознает. WP (по замыслу) довольно скрытно раскрывает идентификаторы пользователям и почти никогда этого не делает, порождая довольно много плагинов только для этой цели.

Как продукт того, что он не является содержательным (или ценным значимым для человека), он не является самодокументируемым. Нет никакого способа определить, какой пост 5 мог быть из вашего фрагмента.

И, наконец, хотя идентификатор однозначно идентифицирует публикацию в конкретной базе данных , гораздо менее вероятно, что это произойдет, как только контент начнет перемещаться между базами данных и/или даже разными системами.

Итак, что же такое лучшие варианты?

Я заметил две типичные причины для извлечения и использования отдельной записи.

Работа с конкретным контентом на сайте

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

Для извлечения такого контента get_page_by_title() подходит. Несмотря на название, он принимает $post_type в качестве третьего аргумента и будет работать для не просто страницы.

Таким образом, используя лучшую идентификацию (и создавая при этом самодокументируемый код), ваш фрагмент кода превращается в:

$about_page = get_page_by_title( 'About' );

Работа с конкретным местом на сайте

Другой случай, когда сообщение используется в качестве места на сайте, а не конкретного контента. Например, мы хотели бы получить часто задаваемые вопросы по сайту, но не уверены (или не заботимся), как он точно назван, и другие детали контента.

Но если мы знаем, где это в структуре сайта, мы можем использовать get_page_by_path() функция, очень похожая на предыдущую:

$faq_page = get_page_by_path( 'about/faq' );

Другие случаи

В более сложных случаях не всегда существуют хорошо подобранные функции. Иногда это сводится к использованию get_posts() с его богатыми возможностями запроса, даже если только для одного сообщения.

 7
Author: Rarst, 2014-08-26 17:04:46

На этот вопрос будут даны некоторые ответы, основанные на мнении, но что ж, я попробую.

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

  1. До версии 3.4 или 3.5 эта функция работала только тогда, когда параметр был var, это может быть одной из причин, по которой кто-то сказал вам об этом.
  2. Я сам не считаю это плохой практикой, но я думаю, что лучше избегать жесткого кодирования идентификаторов, таких как тот. Я всегда стараюсь использовать API опций, так как такое значение проще изменить. В некоторых случаях вы также можете использовать API настройки темы.
  3. Кто будет управлять сайтом? Если вы собираетесь управлять сайтом, возможно, не составит труда изменить значение. Но если вы ожидаете, что ваш клиент должен будет изменить код, возможно, будет лучше создать соответствующую "панель параметров".

Я построил нечто подобное пару недель назад, я написал плагин для него. И в теме я только что вызвал функцию плагина. Возможность изменить идентификатор была в метабоксе в каждом сообщении, пользователю просто нужно было установить флажок, чтобы выбрать идентификатор сообщения, которое он хотел отобразить на главном сайте.

Как вы можете видеть, большая часть причин связана с тем, кому придется изменить значение. И создание правильной "панели параметров" также полезно, потому что вы можете настроить правильную проверку данных на случай, если кто-то допустит ошибку.

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

 7
Author: Tomás Cot, 2014-08-26 14:36:47