Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save summercms/ed90d0d077bb10ef0de51b4d42449e54 to your computer and use it in GitHub Desktop.

Select an option

Save summercms/ed90d0d077bb10ef0de51b4d42449e54 to your computer and use it in GitHub Desktop.

Revisions

  1. @eduardoarandah eduardoarandah created this gist Dec 13, 2018.
    100 changes: 100 additions & 0 deletions add_contact_form_7_custom_tag.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,100 @@
    <?php
    /**
    * Contact form 7
    * custom tag: [posts show:12]
    * show parameter is optional
    */
    add_action('wpcf7_init', 'custom_add_form_tag_posts');

    function custom_add_form_tag_posts()
    {
    wpcf7_add_form_tag('posts', 'custom_posts_form_tag_handler');
    }

    function custom_posts_form_tag_handler($tag)
    {
    //get current (local) date
    $blogtime = current_time('mysql');
    list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = preg_split('([^0-9])', $blogtime);

    //how may to show? (default 6)
    $numberPosts=6;
    $show=$tag->get_option('show', 'int', true);

    $args = [
    'post_type' => 'posts',
    'posts_per_page'=> $show ? $show : $numberPosts,
    'order' => 'ASC'
    ];

    // The Query
    $the_query = new WP_Query($args);

    // The Loop
    $rows=[];
    if ($the_query->have_posts()) {
    while ($the_query->have_posts()) {
    $the_query->the_post();
    $rows[]=[
    'id' =>get_the_ID(),
    'title' =>get_the_title(),
    ];
    }
    wp_reset_postdata();
    }
    // debug your query
    // echo $the_query->request;

    // Structure
    $res="<div class='12u'><h3 class='mb-0'>No posts to display</h3></div>";

    if ($rows) {
    $res="<div class='row'>";

    foreach ($rows as $row) {
    $res.="<div>";
    $res.='<input type="checkbox" name="posts[]" value="'.esc_html($row['title']).'" id="'.esc_html($row['id']).'" />';
    $res.='<label for="'.esc_html($row['id']).'">'.esc_html($row['title']).' <br>';
    $res.= esc_html($row['title'])
    $res.=' </label>';
    $res.="</div>";
    }
    $res.="</div>";
    }

    return $res;
    }

    /**
    * When saving, change the array to a comma, separated list, just to make it easier
    */
    add_filter("wpcf7_posted_data", function ($posted_data) {
    //'posts' is the name that you gave the field in the CF7 admin.
    if (isset($posted_data['posts'])) {
    $posted_data['posts'] = implode(", ", $posted_data['posts']);
    }

    return $posted_data;
    });

    /**
    * A tag to be used in "Mail" section so the user receives the special tag
    * [posts]
    */
    add_filter('wpcf7_special_mail_tags', 'wpcf7_tag_post', 10, 3);
    function wpcf7_tag_post($output, $name, $html)
    {
    $name = preg_replace('/^wpcf7\./', '_', $name); // for back-compat

    $submission = WPCF7_Submission::get_instance();

    if (! $submission) {
    return $output;
    }

    if ('posts' == $name) {
    return $submission->get_posted_data("posts");
    }

    return $output;
    }