Fetch GiveWP Donation Form metadata and display on a page using ACF (Advanced Custom Fields) - wordpress

I'm building a donations platform on WordPress using GiveWP to process donations. I then built campaign pages using Pages, then added links to the donation forms for users to make donations. On said campaign pages, we have GiveWP widgets displaying recent donation activity.
In a nutshell, I might have a campaign page as https://give.me/help-Jon-win/, then a button on the page named "Donate" with url https://give.me/donations/help-Jon-win/, which takes you to the donation form.
My problem now is I have a "Recent Campaigns" page which shows Pages recently created as campaign pages, showing a summary of each campaign. I want to show metadata from the GiveWP donation forms like a progress bar, donations total or even donations count on that summary, but the "Recent Campaigns" page only fetches pages as post_type and nothing else.
I then installed the Advanced Custom Fields plugin, with the hope I can fetch donation forms data and link to a particular page, but all it's done so far is only display the title of the donation form. How can I use the donation form data to fetch other data, which I can then show on the frontend?
I tried:
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'form',
'meta_key' => 'donations_progress',
'meta_value' => 'donations_progress'
));
if($posts)
{
echo '<ul>';
foreach($posts as $post)
{
echo '<li><' . get_donors($post->ID) . '>' . get_the_title($post->ID) . '</li>';
}
echo '</ul>';
}
?>````

Related

Can a WordPress post display other Custom Posts?

I'm creating a custom post type of "podcast." Each Podcast post collects the title, cover art, host name, etc. I have an HTML template for how these will be displayed.
Now what I'd like to do is create a handful regular posts that display these podcast posts. For example, "10 podcasts about history," which would display some of the history podcast entries.
Is this possible? If there's a plugin, I'd be open to that, but this also seems like something that a theme developer should be able to code.
This works, you just have to figure how you want to 'rank' them, whether you going to have shortcode parameter to pass say the post type, so you can use it for multiple types
function get_p () {
$custom_p = get_posts(array(
'post_type' => 'event',
'numberposts' => 10,
));
$html = '';
foreach (($custom_p) as $id=> $post) {
$html .= '<li>'.$post->post_title.'</li>';
}
$html = '<ul>'.$html.'</ul>';
return ($html);
}
add_shortcode('get_p','get_p');

Adding a Customer Review page in an existing word press theme

I am developing a webpage in Wordpress. My theme doesn't have a customer review page. So i want to manually add a page to display customer reviews. It should work like, the customer can write a review by giving his name and mail and then the actul review, after that he can submit it. Once he submitted then the review has to be displayed in the Review page. I need some help or any suggesting for any related plugins where i can do this.
you can use Custom Post type for it. create custom post type with name "customer review". you can create it using https://wordpress.org/plugins/custom-post-type-ui/ plugin.
After that you need to create archive-your custom posttype slug (ex. archive-customer_review.php) page and fetch custom posttype data like below:
<?php
$args = array(
'post_type'=> 'services',
'areas' => 'painting',
'order' => 'ASC'
);
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
?>

Add a user along with one custom post type

I am developing this plugin that admin can add a user in the backend and when user is created, plugin can automatically generate one custom post which I have added to the theme. The custom post will store user ID that is just created (or if it is possible make that user an author of the post)
I wonder if what I have mentioned above is possible practically. If anybody has any better advice, I am open for any suggestions.
Thank you in advance
I'm not sure that a unique custom post type per user is the best way to implement what you're wanting to achieve. If you have 100 users, you will have 100 custom post types making the wp-admin a nightmare as the left menu would grow with so many menu-items.
Wouldn't it be easier to just use a normal post type and then have the page that shows the user's dashboard filter the posts to only show posts where the user is the post_author? You could then add a hook to catch when a user registers and create the example post, you could modify the code below and add it to your functions.php:
add_action( 'user_register', 'myplugin_registration_save', 10, 1 );
function myplugin_registration_save( $user_id ) {
$userPostsCategory = 3;
// Create post object
$my_post = array(
'post_title' => 'Sample Story' ),
'post_content' => 'You can edit this or create a new story',
'post_status' => 'publish',
'post_author' => user_id,
'post_category' => array( $userPostsCategory )
);
// Insert the post into the database
wp_insert_post( $my_post );
}
This method will lower the number of customisations you'd have to do to your themes and make management of the posts a little easier.
Further reading on this:
User registration hook
Inserting a post using wp_insert_post

Creating pages from Ninja form data

I've created a WordPress page with a Ninja form on it that collects miscellaneous data about a product, including some uploaded images. The page with the form is accessible from the main menu by clicking the "Input" item, so the user doesn't need to access the backend to upload their product data.
I now want to put this data into a custom post type called "Listing." There will eventually be thousands of these data sets and so thousands of "Listing" pages, as people come to the site, click Input in the main menu to get to the page with the Ninja form and fill it out.
Could someone tell me how they would go about now building these listing pages from the data the form has collected?
I'm running Ninja's Front-End Post option which supposedly will create a page from the form data. This plugin has some Post creation settings where you can select the post type to create, but this isn't working for me. I would expect the submitted form data to show up under dashboard | Listings, but there's nothing there after submitting the form.
Has anyone gotten this to work?
Thanks for your help.
I think you can use only Ninja Forms without extensions, and hook directly in 'ninja_forms_after_submission' that fires after submission and allow you to use data submitted and perform actions.
This is a starter codebase to achieve your result, but needs to be customized on your needs and your form structure.
add_action( 'ninja_forms_after_submission', 'create_page_from_ninjaform' );
function create_page_from_ninjaform( $form_data ){
// your fields data
$form_fields = $form_data[ 'fields' ];
// !!! this is an example, it depends form fields in your form
$title = $form_fields[ 1 ][ 'value' ];
$content = $form_fields[ 2 ][ 'value' ];
$sample_meta_field = $form_fields[ 3 ][ 'value' ];
$new_post = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'listing', // be sure this is the post type name
);
$new_post_id = wp_insert_post( $new_post );
update_post_meta( $new_post_id, 'your_meta_key', $sample_meta_field );
}
This code should be copied in functions.php file
Not tested of course.
Good luck ;)
The Ninja Forms Front-end Posting extension isn't really meant for displaying form submission data on the front end.
From: https://ninjaforms.com/extensions/front-end-posting/
"The Ninja Forms Front-end Posting extension gives you the power of the WordPress post editor on any publicly viewable page you choose."
If you want to show Ninja Forms submission data on the front end, you will have to retrieve them from the database with code in functions.php or by writing a plugin (recommended). You could then parse and manipulate them and create a shortcode that would allow you to insert your formatted submission data easily in Wordpress posts or pages.
Here's a link to a feature request, asking for the same thing. The author of that request posted a link to a plugin (click Download as Plugin) they wrote which may do what you want or give you further insights as to how you could implement this.
https://github.com/wpninjas/ninja-forms/issues/892
If you do not mind paying a little money for a plugin I would recommend using gravity forms rather then ninja forms for more advanced stuff like this.
I manually create a custom post type "oproep" and used a gravityforms plugin to create a custom post from type oproep when an user submits the form.
Because you use custom post type archive pages www.mysite.com/oproep will be automatically created so you already have a list of "Listings". The singe pages www.mysite.com/oproep/title will also be created for you by default, you could override these templates as well if you would like depending on your theme.
The only thing you have to do is add a few php lines to your functions.php (or write your own plugin) that adds the custom post type. The rest all works automatically.
I went so far as writing code to make users able to edit their submissions, read custom taxonomy tags in dropdowns etc. You got lots and lots of more options using gravity forms.
FrancescoCarlucci's answer is correct, but just adding an additional comment: in case you want to specify by form field IDs which fields should go where in your post, NinjaForms passes the ID as a number (in my case for example, I needed field 136 for my post title). It may have been obvious but I racked my brain for a while until I figured it out.
function create_post($form_data) {
$form_fields = $form_data[ 'fields' ];
$post_fields = array(
'post_content' => '',
'post_content_filtered' => '',
'post_title' => '',
'post_excerpt' => '',
'post_status' => 'pending',
'post_type' => 'post',
);
foreach ($form_fields as $field) {
$field_id = $field[ 'id' ];
$field_key = $field[ 'key' ];
$field_value = $field[ 'value' ];
if ($field_id == 136) {
$post_fields['post_title'] = $field_value;
}
}
wp_insert_post($post_fields, true);
}

WP: Display a specific custom post type list (archive) and that post content (single) within a custom page template

Here's what I have.
I have a custom page template that I use for a parent page and all child pages created under that parent. This template dynamically displays the parent, "About", and all child pages, "Contact", "Terms", "Privacy", etc. on the left navigation side bar and cooresponding content as the user clicks around.
I have a custom post type, "Press", and the client wants this as a new menu choice on said left navigation side bar i.e.; "About", "Press Releases", "Contact" . . . and so on . . .
I assume I need to inject some logic into the custom page template that currently has the basic query for "page" content. I'm guessing the logic would be something like "Get me some normal page content BUT if the user clicks on "Press Releases" I'll engage another alternate query that pings the CPT "Press", grab that post_id and display the content accordingly.
Am I off track here or just having a really bad brain fart today?
Did you try adding the custom post type to the wp_list arguments?
<?php wp_list_pages( $args ); ?>
<?php $args = array(
'child_of' => 0, //parent page
'exclude' => '',
'include' => '', //parent page
'post_type' => 'page, Press' //include custom post type
); ?>

Resources