Могу ли я условно изменить то, что возвращает the_content () в Wordpress? - PullRequest
3 голосов
/ 12 августа 2011

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

Кажется, что независимо от того, насколько специфичны мои шаблоны, в итоге я сталкиваюсь с одной из двух вещей:

the_content();

или

get_template_part( 'content', get_post_format() );

Это та часть, над которой я хочу лучше контролировать. Тем не менее, кажется, что я могу взять контент только как большой кусок. Мой обходной путь состоял в том, чтобы стилизовать части содержимого как «display: none», в зависимости от используемого шаблона, но есть ли способ условно изменить фактическое содержимое, возвращаемое вышеуказанным кодом? Если да, то как и где я это сделаю?

Ответы [ 2 ]

4 голосов
/ 12 августа 2011

Или:

  1. Не помещайте биографию автора в содержание публикации (например, используйте настраиваемое поле) и отображайте ее при необходимости. Тогда вам не нужно трогать контент.

  2. Напишите фильтр для the_content, который при желании изменяет свое содержимое.

http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content

2 голосов
/ 17 августа 2011

the_content () должен возвращать только содержимое сообщения. Информация об авторе не должна быть включена, если автор явно не перечислил ее в сообщении.

Я полагаю, вы ищете что-то вроде:

<?php

    // This array can contain category IDs, names, or slugs.
    // I went with an array for the ability to easily extend in the future.
    $cats_for_bio = array(
        "Fiction",
        "OtherCategory"
    );

    if ( in_category($cats_for_bio) ) {

        // You need to get the author id since we are outside of the loop.
        $authorID = $posts[0]->post_author;

        // Place your bio output code here as you please.
        // This example just grabs the author name and description.

        $authorName = get_the_author_meta("first_name", $authorID) . " ";
        $authorName .= get_the_author_meta("last_name", $authorID);

        $authorDesc = get_the_author_meta("user_description", $authorID);

        $authorBio = "<p><b>Author:</b> $authorName</p>/n";
        $authorBio .= "<p><b>Bio:</b> $authorDesc</p>/n";

        echo $authorBio;
    }
?>

Поскольку вы создаете свою собственную тему, вы можете легко использовать функцию get_the_content () ... Это даст вам контент, не повторяя его ... Недостатком этого является то, что фильтры, применяемые к the_content (), не нужны. дольше применяется. Вы можете получить содержимое с помощью фильтров из функции get_the_content (), используя apply_filters ('the_content', $ content), где $ content является переменной возврата, отправленной get_the_content ()

Третий вариант, о котором упоминалось ранее, - это создание собственного фильтра ... это лучше всего сделать в плагине, и его можно будет применить к любой теме, которую вы можете использовать в будущем.

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