Custom post type multilingual with Polylang - wordpress

I have this issue that i do not now how to solve. We have a wordpress page that is multilingual thanks to Polylang plugin. Everything works great except custom post type from other plugin. Post created with this custom post type loads content for Base language which is english, but whenever we change the language it stops working. It does not load content
I registered post type like this:
register_post_type( 'placement',
array(
'labels' => array(
'name' => __( 'Placementy' ),
'singular_name' => __( 'Placement' )
),
'public' => true,
'menu_icon' => 'dashicons-welcome-write-blog'
)
);
I tried, registering post type in my functions.php instead of plugins main file, still the same... Other custom post types are working great and they are registered the same way. I also tried creating template for custom post type in my wordpress theme instead of using the one from plugin, but it also failed... Do not really know why it is not working. Especially when everything else works. Also cleared cache, after changes. Checked changed in developer and local environment. What can cause such behavior?

in functions.php
add_filter('pll_get_post_types', 'add_cpt_to_pll', 10, 2);
function add_cpt_to_pll($post_types, $hide) {
if ($hide)
// hides 'my_cpt' from the list of custom post types in Polylang settings
unset($post_types['my_cpt']);
else
// enables language and translation management for 'my_cpt'
$post_types['my_cpt'] = 'my_cpt';
return $post_types;
}
for more details
https://polylang.wordpress.com/documentation/documentation-for-developers/filter-reference/

Related

Defining page layout for defualt post formats (aside)

single-aside.php defined but still using single.php for my post that having aside format.
Hi i used post-formats(aside) for some of my post and using single.php for styling them in the past despite defining a new post-type , the problem is now i want to use another page layout diffrent than my other posts and pages just for this aside type , but when i create single-aside.php wordpress doesnt use this page , and i flushed away my permalinks thats not the problem. do you think single page is defineable for defualt post formats like aside, video,quote and... ? any idea?
As per documentation you can use has_post_format() see more here https://codex.wordpress.org/Post_Formats under Using Formats.
Since the post formats aren't custom post types, you would need to add it to single.php:
if ( has_post_format( 'aside' )) {
//Your custom code for aside goes here
}
Alternatively, if you would like to use a different php file, you can create your custom post type and give support for Post formats.
Register with support:
add_action( 'init', 'aside_post_type' );
function aside_post_type() {
register_post_type( 'aside',
array(
'labels' => array( 'name' => __( 'Aside' ) ),
'public' => true,
'supports' => array('title', 'editor', 'post-formats') //this will give support for post formats
)
);
}
Then add single-aside.php to your theme and style this custom post type as needed.

Plugin single.php not showing

I'm creating a plugin for Wordpress that creates a new post type for news and events (yes, yet another one ;-) ). The post-type is registered under the name gg_nae.
The post type works as expected; the post type can be saved and edited.
Now I want to create a custom template file. I called it single-gg_nae.php and I saved it in the same folder as the plugin-code.
If I understand the explanation on https://developer.wordpress.org/plugins/post-types/working-with-custom-post-types/ correctly that should be enough to render the post type in the custom template, but it won't. It renders the post with the single.php file from the template.
If I move the custom template to the theme-folder however, Wordpress uses the template as intended; it renders the post in the single-gg_nae.php template.
What am I doing wrong here? Should single-gg_nae.php be placed in a specific folder in the plugin-map?
edit: I already saved the permalink-structure again, but that didn't help.
only for the missing in this three below parameter u are getting error
'rewrite' => array( 'slug' => 'slider' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => true,
try it in argument list with rest of parameters
I was thinking all wrong when approaching this issue.
I have created custom post types before and always included them in the functions.php of my Wordpress theme, therefor creating templates (archive-PostTypeName.php and single-PostTypeName.php) to show them. I assumed that was also needed when developing a CPT-plugin.
In case of a plugin, however, you have to alter the behavior of the single.php template from within the plugin using filters. I have added the following (simplified) code to my plugin:
/**
* Alter the_content if Posttype is custom post type
*
* #uses is_single()
*/
add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {
if ( is_single() AND get_post_type() === 'PostTypeName') {
// Do stuff here
$content = 'This is My Custom Post Type!';
}
// Returns the content.
return $content;
}
When opening posts of the type 'PostTypeName' the content will say 'This is My Custom Post Type!', otherwise it'll show the content of the post of page.
More information about filters (and actions) can be in the Wordpress Codex

ACF page link shows wrong archive url

I have a custom post type 'products' and use polylang to localize content and rewrite urls. Since I changed the rewrite from 'products' to 'tools', acf shows me the wrong url for the tools archive in a page-link field.
Where before it showed
*/de/products/
it now shows
*/tools/
without the language identifier. I already flushed the wordpress permalink cache without success. All the links generated by wordpress work fine.
This is the custom post type rewrite
'rewrite' => array( 'slug' => 'tools', 'with_front' => false ),
'has_archive' => true,
I appreciate your help.

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);
}

wordpress create custom post type that pulls custom post types

I'm customizing the admin on a new WP site, and I am creating an over-arching custom post type, that will allow the admin to create pages for the site. I want them to be able to pull values from other custom post types and set them here. I'm struggling to find good documentation on how to do this though. I can create multiple custom post types without a problem, just unsure how to pull the values of post_type_y into the meta_options for post_type_x.
Any and all help is appreciated!
Since I can't 'comment' on your question, I'll do my best to answer it as I understand it..
There's a plugin posts to posts that will allow you to associate Post 1 with Post 2. It's a little clunky, but gets the job done.
If you're looking to associate tags, categories or whatever between multiple post-types, I prefer using custom taxonomies as they are relatively easy to implement.
Sample Custom Taxonomy:
function languages_init() {
// create a new taxonomy
register_taxonomy(
'languages',
array('post','clients','positions','projects'), // Set various post-types
array(
'label' => __( 'Languages' ),
'sort' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'language' )
)
);
}
add_action( 'init', 'languages_init' );

Resources