Ссылка 2 wp_options - PullRequest
       11

Ссылка 2 wp_options

1 голос
/ 04 июня 2019

Я создаю плагин конфигурации для управления настройками сайта, которые поэтому являются wp_options.

Я бы хотел иметь возможность выбрать один или несколько проектов из списка (отображаются в виде флажков). Те, которые выбраны, затем сохраняются в wp_options, тогда я хотел бы связать параметры с этими проектами, такие как URL.

Вот когда у меня проблемы ...

Когда я обновляю выбранные проекты, связанные параметры, такие как URL-адреса, сами не обновляются

Вот примеры моего кода:

<?php
    //wp_options of projects
    public function page_config_init_list_projects(){ 
        add_settings_section(
            'projet-section',
            'Choix des projets',
            array( $this, 'print_projets_section_info' ),
            'configuration-projet' // Page
        );

        add_settings_field(
            'name', 
            'Liste des projets', 
            array( $this, 'project_chosen_callback' ),
            'configuration-projet', // Page
            'projet-section' // Section
        );

        add_settings_field(
            'url',
            'URL',
            array( $this, 'url_callback' ),
            'configuration-projet', // Page
            'projet-section' // Section
            );

        register_setting(
            'config-projets', // Option group
            'projets' // Option name
        );
    }

    //saving the projects chosen
    public function project_chosen_callback(){        
        $items = array("project 1", "project 2", "project 3";

        foreach ( $items as $id => $item) {                
            $names_projects = array();
            foreach ($this->projetOptions as $projet){
                array_push($names_projects, $projet['name']);
            }

            if ( in_array($item , $names_projects) )  {
                $checked = 'checked="checked"';
            } else $checked = null;              

            echo '<input type="checkbox" id="name" name="projets[][name]" value="'. $item .'"'. $checked.'/> '. $item .'</p>';
        }
    }

    // parameter URL linked to a project chosen... here are the problems//
    public function url_callback(){                

        foreach ($this->projetOptions as $id=>$projet){
            echo $projet['name'] . ' : ';

            printf(
                '<input type="text" id="url" name="projets['.$id.'][url]" value="%s" /><br>',
                isset( $projet['url'] ) ? esc_attr( $projet['url']) : ''
            );
        }
    }


В данный момент я пытаюсь заставить параметр projects реагировать на структуру такого типа:

array(2) { 
   [0]=> array(2) { 
                     ["name"]=> string(8) "project 1" 
                     ["url"]=> string(4) "test"
                   } 
   [1]=> array(1) { 
                      ["name"]=> string(8) "project 2"
                   } 
}

Когда я выбираю проект и связываю его с URL, он работает хорошо. однако, когда я отменяю выбор проекта, он удаляет себя из wp_options, но URL остается. Кроме того, URL-адреса связаны с идентификаторами, а не с проектами, поэтому при изменении списка выбранных проектов URL-адреса сдвигаются ...

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

1 Ответ

0 голосов
/ 05 июня 2019

Ок, поэтому я нашел решение, если кто-то сталкивается с такими же проблемами. Не очень, признаю, но если список проектов не меняется, все в порядке. Если у кого-то есть идеи получше, не стесняйтесь поделиться ими!

Я связываю выбранный проект с его индексом в таблице wp_options, чтобы я мог получить URL-адрес, связанный с этим индексом.

   public function project_chosen_callback(){        
        $items = array("project 1", "project 2", "project 3");

        foreach ( $items as $id => $item) {

            if ( in_array($item , $this->projetOptions['name']) )  {
                $checked = 'checked="checked"';
            } else $checked = null;

            echo '<input type="checkbox" id="name" name="projets[name]['.$id.']" value="'. $item .'"'. $checked.'/> '. $item .'</p>';

        }
    }

    public function url_callback(){                
        foreach ( $this->projetOptions['name'] as $id => $name) {
            echo $name.' :<br>';

            printf(
                '<input type="text" id="url" name="projets[url]['.$id.']" value="%s" /><br><br>',
                isset( $this->projetOptions['url'][$id] ) ? esc_attr( $this->projetOptions['url'][$id]) : ''
                );
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...