Админка в теме

Пытаюсь сделать страницу настроек в теме.

Возникла проблема с тем, как связать файл settings.php (там у меня прописаны настройки) и саму тему.

Первое: как вывести количество постов в списке <?php get_archives(‘postbypost’, 10); ?>

Пыталась сделать так: <?php get_archives(‘postbypost’, ‘.$mytheme[‘postlist’]’); ?>
pagelist – это переменная, которая определяет сколько постов будет выводится в этом списке.
Выдает ошибку.

Второе: нужно вывести список страниц, исключая текущую страницу и еще некоторые:
<?php wp_list_pages(‘title_li=&depth=-1&exclude=1,2,3,’.$post->ID); ?>

Хотела заменить страницы с ID 1,2,3 переменной pagelist. Вот так:

<?php wp_list_pages(‘title_li=&depth=-1&exclude=.$mytheme[‘pagelist’] ,’.$post->ID); ?>

И опять ошибка.

Народ, может, кто знает, подскажите, пожалуйста, как правильно это сделать?

Откройте любой навороченный шаблони или в платный какой загляните, где это реализовано.

Ценный совет, конечно.
Смотрела уж. Все равно ничего не получается.

1. Список:
Определение переменной:
<?php $mytheme[‘postlist’]=5; ?>
Вашу строку правильнее записать так:
<?php get_archives(‘postbypost’, $mytheme[‘postlist’]); ?>
Но лучше явно указать значения всех переменных. Например так:
<?php get_archives(‘postbypost’, $mytheme[‘postlist’], ‘custom’, ”, ‘<br />’); ?>

2. По аналогии смотрите на кавычки и точки.

Help Desk, а вот это <?php $mytheme[‘postlist’]=5; ?> куда вставить?

Что то не получается. Выводятся все статьи, существующие на сайте, даже если не указываю нужное количество на странице настроек.

А если указываю количество, оно почему то не сохраняется, а при попытке сохранения, выбрасывает из админки на 404 страницу. Наверное, я неправильно прописала админскую часть.

Я не знаю, где Вы храните «переменную, которая определяет сколько постов будет выводится в этом списке». В первом сообщении у Вас «10» было.

Второй пример: <?php $mytheme[‘pagelist’]="2,69,79,"; wp_list_pages(‘title_li=&depth=-1&exclude=’.$mytheme[‘pagelist’].$post->ID); ?> и $mytheme[‘pagelist’]="2,69,79,"; в нем – тоже самое. Где-то же Вы эти переменные определяете 🙂

Если не указываете нужное количество, то почему ожидаете, что будут выводиться не все?

А если указываю количество, оно почему то не сохраняется, а при попытке сохранения, выбрасывает из админки на 404 страницу. Наверное, я неправильно прописала админскую часть.

Этот абзац непонятен

В админке wordpress, на странице настроек темы, в строке,

<p><input class="widefat" style="width:100px" name="cp_pagelist" id="cp_pagelist" value="’.$this->options["pagelist"].’"> Количество постов для вывода на главной</p>

указываю количество постов. Например 10. Нажимаю "Сохранить".
Страница должна перезагрузиться и на ней должно отобразиться указанное число.
Вместо этого меня выбрасывает из админки на 404 страницу. А количество постов не сохраняется.

Одной этой строки для исправления ошибки мало. Очень мало!

Вы выводите форму, вводите данные, отправляете их. Потом управление передается скрипту, который введенные данные перехватит и обработает (например, сохранит введенное число), после чего вернет в броузер (или сделает редирект/передаст управление на) новую страницу.

Для ответа на Ваш вопрос Вы должны разбить описанные этапы на более мелкие задачи, определить проблемный этап, а в нем частную проблему. Если не получится разобраться самой, то спросить здесь описав минимумом кода проблему: нужно то-то и то-то, делаю так-то так-то, ожидаю получить то-то то-то, а получаю вот это.

У Вас получилось, что-то типа такого: из Владивостока машина выехала – вот она, а в Москву не приехала. Почему? 🙂

Поняла.
Вот код страницы настроек темы, который я никак не могу состыковать с самой темой.

<?php
$mytheme = "....";
    class ControlPanel {

    var $default_settings = Array(
    'feed' => 'http://feeds.feedburner.com/',
    'resetpost' => '13',
    'pagelist' => '1,3',
    'footertext' => 'Copyright © 2009 -....',
    );
    var $options;
    /*   Initiate new control panel function  */
    function ControlPanel() {
    add_action('admin_menu', array(&$this, 'add_menu'));
    if (!is_array(get_option('themadmin')))
    add_option('themadmin', $this->default_settings);
    $this->options = get_option('themadmin');
    }
    /*   Create a theme settings page to edit theme settings and put its css*/
    function add_menu() {
    add_theme_page('Theme Options', 'Theme Options', 8, "themadmin", array(&$this, 'optionsmenu'));
    }
    /*    The options page in control panel. Saving and editing goes here */
    function optionsmenu() {
    if ($_POST['ss_action'] == 'save') {
    $this->options["feed"] = $_POST['cp_feed'];
    $this->options["resetpost"] = $_POST['cp_resetpost'];
    $this->options["pagelist"] = $_POST['cp_pagelist'];
    $this->options["footertext"] = $_POST['cp_footertext'];
    update_option('themadmin', $this->options);
    echo '<div class="updated fade" id="message" style="background-color: rgb(255, 251, 204); width: 400px; margin-left: 17px; margin-top: 17px;"><p>Your changes have been <strong>saved</strong>.</p></div>';
    }
    echo '<form action=" method="post" class="themeform">';
    echo '<input type="hidden" id="ss_action" name="ss_action" value="save">';
    print '
    <div class="cptab"><br>
    <b>Theme Options</b>
    <br>
    <p><input class="widefat" style="width:300px" name="cp_feed" id="cp_feed" value="'.$this->options["feed"].'"> Адрес RSS фида</p>
    <p><input class="widefat" style="width:100px" name="cp_resetpost" id="cp_resetpost" value="'.$this->options["resetpost"].'"> Количество постов для вывода на главной</p>
    <p><input class="widefat" style="width:100px" name="cp_pagelist" id="cp_pagelist" value="'.$this->options["pagelist"].'"> Список страниц <br />(Введите через запятую ID страниц, которые вы хотите исключить из вывода)</p>
    <p>Текст в футере:<br /><textarea style="width:400px;height:75px;" name="cp_footertext" id="cp_footertext">'.stripslashes($this->options["footertext"]).'</textarea></p>
    </div>
    ';
    echo '<input type="submit" value="Сохранить »" name="cp_save" class="dochanges" />';
    echo '</form>';
    }
    /* ended cpanel class */
    }
    $cpanel = new ControlPanel();
    $mytheme = get_option('themadmin');
?>

Если можете, подскажите, плиз, в чем здесь ошибки?

C этим разобралась. Была пропущена кавычка.

Help Desk, а как добавить сюда тег <li>, чтобы заглавия выводились в виде списка?

<?php get_archives(‘postbypost’, $mytheme[‘postlist’], ‘custom’, ”, ‘<br />’); ?>

<?php get_archives(‘postbypost’, $mytheme[‘postlist’], ‘html’, ”, ‘<br />’); ?>

Help Desk, спасибо.

И еще проблема (надеюсь последняя).

Это список других страниц, выводимый на странице, т.е. в файле page.php.

<?php wp_list_pages(‘title_li=&depth=-1&exclude=’.$mytheme[‘pagelist’].$post->ID); ?>

Он должен исключать из вывода те страницы, которые я запретила к выводу на странице настроек темы.
Если я запретила к выводу, например, страницы 1,2,3, то он исключает 1 и 2, а последнюю страницу выводит.
Если запрещено к выводу 1,2,3,4,5 – то 1,2,2,4 страницы исключаются, а 5 выводится.

Как это исправить?

$mytheme[‘pagelist’].$post->ID "склеивает" последнюю цифру с ID текущей. Если я прав, то в списке есть и текущая. Есть? Тогда так:
$mytheme[‘pagelist’].’,’.$post->ID
Может быть 🙂

Для начала посмотреть содержимое переменных $mytheme[‘pagelist’] и $post->ID, а после этого двигаться дальше.
Выведите их содержимое в page.php – может быть сразу сами все и поймете.
<?php echo "<p>Переменная MythemePagelist = ".$mytheme[‘pagelist’]."<br />Переменная postID = ".$post->ID."</p>"; ?>

Не должна, т.к. запятую я ставил

$mytheme['pagelist']="2,69,79,";

Разве, что Мила ее пропустила. Содержимое переменных покажет

Ю.Б., текущая страница не выводится, но ваше исправление все равно работает, как и всегда.

Спасибо!

Help Desk, и вам спасибо за помощь – разобралась.

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

Anonymous
Отправить
Ответ на: