web-dev-qa-db-fra.com

Distribuer et emballer des plugins

J'ai un projet dans lequel je vais utiliser WP comme portail client vers une application externe. L'application est accessible via des appels de services Web (soap/xml).

L'application a pas mal de formulaires et pour cela je prévois d'utiliser le plugin Form de Formable. Le processus de connexion a été modifié pour que la connexion soit réellement effectuée à distance et qu'un utilisateur local soit créé s'il n'en existe pas déjà un.

En regardant un peu plus loin, j'essaie de comprendre comment je distribue les pages personnalisées dont j'ai besoin. Je n'ai pas l'intention d'être spécifique à un thème. Donc, j'imagine que je vais installer des plugins et modifier la base de données (pour les pages personnalisées).

Ma question est la suivante: existe-t-il un guide/une méthodologie standard pour la distribution de plugins applicable à ma situation? Quand les plugins ont des pages spécifiques, comment sont-ils installés? et comment les menus sont-ils ajustés en conséquence?

2
user44021

Eh bien, je ne sais pas trop si j'ai compris cela, mais je vois que vous voulez "simuler" des pages à l'aide d'un plugin, et mon meilleur pari est de créer vos propres publications à la volée à l'aide de requêtes WordPress et de réécrire les règles. Essayons ça:

Créez une variable pour répondre à votre vue.

add_action( 'query_vars', 'add_query_vars' );
function add_query_vars( $vars ) {
    array_Push( $vars, 'form_id' );
    return $vars;
}

Créez une règle de réécriture pour renseigner cette variable:

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array(
        'forms/([^/]+)/?$' => 'index.php?form_id=$matches[1]'
    );
    return $new_rules + $rules;
}

Maintenant, visitez la page options-permalink.php de votre site pour purger les règles et rendre celle ci-dessus valide ( http://yourdevsite.com/wp-admin/options-permalink.php ).

Vous pourrez accéder à des URL personnalisées telles que http://yourdevsite.com/forms/some-form ou l’équivalent http://yourdevsite.com/?form_id=some-form .

Maintenant, comme dans WordPress, nous ne pouvons pas supprimer la requête principale. Remplaçons-la quand un form_id correspondant se produit:

add_action( 'wp', 'custom_wp_query' );
function custom_wp_query( $wp ) {

    // Don't do anything for other queries
    if ( ! $form_id = get_query_var('form_id') )
        return false;

    global $wp_query;

    // Let's respond this request with this function
    $func = 'form_' . str_replace( '-', '_', $form_id );

    // Throw a 404 if there's no function to deal with this request
    if ( ! function_exists( $func ) ) {
        $wp_query->is_404 = true;
        return false;
    }

    // Set as a valid query for this case
    $wp_query->is_404 = false;
    $wp_query->is_single = true;
    $wp_query->found_posts = 1;

    // Call the function
    $post = call_user_func( $func );

    // Stick this post into the query
    $wp_query->posts = array( $post );
    $wp_query->post = $post;

}

Et enfin, créez votre message:

function form_some_form() {
    return (object) array(

        // Put a negative ID as they don't exist
        'ID' => Rand() * -1,

        // What matters for us
        'post_title' => 'Form title',
        'post_content' => 'Some post content (the form itself, presumably)',

        // It is important to maintain the same URL structure of 'add_rewrite_rules',
        // otherwise wrong links will be displayed in the template
        'post_name' => 'forms/' . get_query_var( 'form_id' ),
        'post_guid' => home_url( '?form_id=' . get_query_var( 'form_id' ) ),

        // Admin
        'post_author' => 1,

        // Straighforward stuff
        'post_date' => date( 'mysql' ),
        'post_date_gmt' => date( 'mysql' ),
        'post_status' => 'publish',
        'post_type' => 'page',
        'comment_status' => 'closed',
        'ping_status' => 'closed'
    );
}

Donc, si vous voulez maintenant créer plus de 'pages personnalisées' pour - disons - un formulaire avec une URL some-other-form, créez simplement une fonction nommée form_some_other_form comme form_some_form.

De toute évidence, le lien de modification ne fonctionnera pas car il vous enverra à un poste non existant dans admin.

Et pour les menus, comme vous le demandez, je suggère d'insérer ces pages sous forme de liens personnalisés.

1
vmassuchetto