Criando um código curto com base nas preferências dos usuários

Background: Criando um shortcode dynamic com base em inputs de usuários. Este shortcode deve alterar a saída do do_shortcode base nos campos que o usuário seleciona.

Exemplo: Em uma página, um usuário seleciona

“Mostre-me: (X) Skateboarding (X) Basketball () Hockey”

Quando eles clicam em enviar, o código curto para fazer isso deve mostrar como:

 [shortcode_name types="Skateboarding, Basketball"] 

e como o Hóquei não foi selecionado, o Hóquei não seria incluído.

Isso é o que eu estou tentando realizar, estou apenas tendo dificuldade em bloquear como realmente fazê-lo.

Solutions Collecting From Web of "Criando um código curto com base nas preferências dos usuários"

Teoria

Pode ter sido difícil de dizer para você, mas é realmente bastante claro o que você está tentando realizar.

Um shortcode é uma boa maneira de inserir conteúdo dynamic em uma página (ou postagem), o ponto em que sua idéia falha é a noção de um “shortcode dynamic”.

Use o código curto para inserir o formulário em seu conteúdo e tenha o retorno de chamada de resposta o que acontece após a submissão.

Familiarize-se com a forma como as formas são tratadas no PHP e com a diferença entre HTTP-POST e HTTP-GET ( Resource 2 , Resource 3 ).

Prática

Leve o seguinte como uma prova de conceito, em vez de uma solução de cópia / colar pronta:

[wpse_161632_sports_selection_form] : [wpse_161632_sports_selection_form]

PHP:

 < ?php /* Plugin Name: WPSE_161632 Plugin URI: http://wordpress.stackexchange.com/questions/161632/ Description: Shortcode form handler example Version: 1.0 Author: Johannes Pilkahn License: GPL3 */ /* Copyright 2014 Johannes Pilkahn This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ if ( ! class_exists( 'WPSE_161632' ) ) : class WPSE_161632 { /** * Form handler * * @since 1.0 * @access public * @see constructor */ public function form_handler( $atts = '' ) { // only relevant if the SC is supposed to have extra parameters extract( shortcode_atts( array( 'example_attribute' => 1 ), $atts ) ); if ( ( isset( $_POST['types'] ) ) { foreach( $_POST['types'] as $type ) { // do something } $this->output( true ); } else { $this->output( false ); } } /** * Outputs the form * * @since 1.0 * @access public * @param bool $output */ public function output( $submitted ) { $options = array( array( 'value' => 'skateboarding' 'label' => __( 'Skateboarding', 'your-text-domain' ) ), array( 'value' => 'basketball' 'label' => __( 'Basketball', 'your-text-domain' ) ), array( 'value' => 'hockey' 'label' => __( 'Hockey', 'your-text-domain' ) ) ); if ( $submitted ) { echo __( 'The form has been submitted!', 'your-text-domain' ); } echo '
'; foreach ( $options as $option ) { echo ''; } echo '
'; } /** * Constructor * * @since 1.0 * @access public */ public function __construct() { add_shortcode( 'wpse_161632_sports_selection_form', array( $this, 'form_handler' ) ); } } endif; // class exists $wpse_161632 = new WPSE_161632; ?>

clicando no botão “Inserir código abreviado”, você deseja usar o JavaScript / jQuery para ver quais checkboxs de seleção estão marcadas, a partir das quais você criará o Shortcode. Depois que o shortcode for criado, use window.send_to_editor('[shortcode]') .

algo como isto em todos:

 $("#insert-shortcode").on('click',function(ev) { ev.preventDefault(); var show = ''; $(".checkboxes").each(function() { if ($(this).is(":checked")) show += $(this).val() + ","; }); window.send_to_editor('[shortcode show="' + show.substring(0,(show.length-1)) + '"]'); }); 

não testado, mas algo assim funciona. Claro, ajuste os seletores para seus nomes específicos. Eu fiz uma suposição em várias coisas, então, se eu pulasse uma porção que você precisa explicar, apenas nos avise.