how to create a theme demo page with differnet layout options? - wordpress

i am developing a theme its almost complete now i am trying to make a demo as i have different homepage layouts like grid, fullwidth, masonry etc etc. I want to create a home page with all different layouts but what is the best way to effectively use layouts
like http://solopine.com/redwood/?home_layout=list on this theme they are logistically handle template parts with url.
How can i do that???

To load dynamically page layouts using url value you will have to use php _GET form method and some programming logic to check the value. Here it goes something like this :
Lets say you have 3 different custom layouts page named ... grid-layout.php fullwidth-layout.php and last one is masonary-layout.php. Remember you will have to create manual menu pages using wp custom links system. Like this
Create three different pages with custom permalinks ..... Lets say put this code into URL box
http://yoursite.com/?layout=grid
http://yoursite.com/?layout=masonary
http://yoursite.com/?layout=fullwidth
Change yoursite.com with your own site address.Anything after "layout=" is the value of get method.
Similar like url box put this names or anything you want into Link Text box :
Grid Layout
Masonary Layout
Full Width Layout
If its done then lets go ahead towards our coding section.
Find where your site's while ( have_posts() ) : the_post(); loop is located searching...... searching..... ow! found it?? Congrates! Put below code there to get the url value to change your site's layout dynamically.
<?php
$layout = $_GET['layout'];
switch ($layout) {
case 'grid': get_template_part( 'layouts/grid', 'layout' );
break;
case 'masonary': get_template_part( 'layouts/masonary', 'layout' );
break;
case 'fullwidth': get_template_part( 'layouts/fullwidth', 'layout' );
break;
default: get_template_part( 'layouts/content', 'single' );
break;
}
?>
Note: layouts/ is the directory folder where your template files are located like grid-layout.php , masonary-layout.php etc..
Above codes are tested and working fine if you have any issue then let me know otherwise if it works then upvote it and accept it as an answer so that others can know that this codes works.... Thank you

Related

WordPress, how to use dynamic urls for the same page?

I don't know if it's possible, but I want to configure a WordPress site to render the same page for all URLs that match the format https://example.com/things/<any_word>, the URL must keep its value.
For example,
The following URLs must show the same content:
https://example.com/things/pencil
https://example.com/things/book
https://example.com/things/tv
Your help would be greatly appreciated
There are several options:
1) Register your custom post type and create defalut template (the best option)
2) Add some custom code to page template (single.php or page.php ...) where your call a specific template for a specific category:
<?php
if (get_the_category(get_the_id())=='your-category')
{
get_template_part( 'TEMPLATE_FOLDER/content', 'something' ); // "content-something.php"
} ?>
3) Create a template and choose it for needed pages
https://developer.wordpress.org/themes/template-files-section/page-template-files/
https://developer.wordpress.org/reference/functions/register_post_type/

Hide a post but make it accessible via a link Wordpress

I'm trying to hide certain posts from displaying on the site using custom code. I CANNOT USE A PLUGIN!
I would like to do something like IF the page is named the-hidden-page do not display it anywhere on the site BUT someone can access it using a URL... For example, http://thedomain/the-hidden-page.
I haven't been successful finding sample code except for this -
<?php if (is_front_page() && !is_paged()
) $posts = query_posts($query_string . '&cat=-33,-66'); ?>
This code is using category names rather than page names. Also if I used the code above I'm not sure where to add it to. I tried function.php but that didn't work.
Can someone provide an example of how the code could be written to hide post with a certain name?
Also tell me in what file I should add your code to?

How to hide title from page node Drupal

I'm trying to remove the title of a page node on Drupal. I have this page:
And I want it to look like this:
As you can see, I want the title to be removed, but only for taxonomy terms. If I try to erase it using CSS, I erase al page-titles, so I wanted to use this module, that allows administrators to auto-generate node titles and hide it.
I go to structure -> type content -> my type content, and edit it. I activate the module, and I want to auto-generate titles depending on the node category. I think it should look like this, but it doesn't work...
Any ideas why?
EDIT: Sorry, I forgot to say: yes, when I activate the module, use it, and select the category as the auto-generated title, it works. But it doesn't hide the title...
It also launches this mistake:
Use Exclude Node Title module.
https://drupal.org/project/exclude_node_title
Setting for this module:
Click on Module->Exclude node title->configure
Home » Administration » Configuration » Content authoring
Select All nodes from Basic Page
Check Full Content for hide title from all cms page except home page
Check Teaser for hide title from home page.
If you want to remove the title, you should look into overriding the page and node templates.
page.tpl.php and node.tpl.php
All you need to do is click "View Source" on both of those and copy them to your theme folder. From there you can modify both as required.
From what I can gather, you'll want to remove the print $title from your node.tpl.php.
Have the similar issue before, as far as I remember, I just added some if statement to the code:
<?php if (blah-blah-blah): ?>
<h2> <?php echo $title; ?> </h2>
<?php endif; ?>
Hope, it'll give you a clue.
Some other thoughts: you can make an if statement or rewrite it not only in page.tpl.php but create some specific page-node-type.tpl.php file and overwrite only its $title, or you can try to customize page's output via Views/Panels modules as well.
Also, could you please make more clear, what title do you want to remove? Page title or node title? And it should be removed only when you are looking nodes associated with some taxonomy term (in other words, when you are on /taxonomy/term/n page), am I right?
By using the Context module, you can add classes to the body so you can target just the taxonomy pages in CSS.
Using Context module to set body classes
Sorry guys, it was as easy as hide title tag on "manage presentation"...
You are all right on your responses, but they were not exactly what I needed... thanks!
Use Exclude Node Title module.
https://drupal.org/project/exclude_node_title
another nice solution for specific nodes, is to use the standard $title_prefix/suffix vars, which should be implemented by every theme. using the standard class element-invisible in page preprocess ..
like:
/**
* Implements hook_preprocess_page().
*/
function YOUR_THEME_preprocess_page(&$variables) {
if (isset($variables['node']) && $variables['node']->nid == 1) {
$variables['title_prefix'] = array('#markup' => '<div class="element-invisible">');
$variables['title_suffix'] = array('#markup' => '</div>');
}
}
Every page should contain a heading.
You should always maintain a structured hierarchy of headings within any web page. You should never have a blank heading or even hide it with display:none;. Hiding any content which isn’t viewable by your visitors but is by search engines is against Google’s guidelines as your intention is to only manipulate search engine results by including it. Restyle a H1 so it fits into your design is the best option.
If you still have to hide it then a better option would be to either create a template for that node, content type or page and simply not print the heading.
Or if you want to use CSS then use position:absolute so the heading doesn’t use any space where it is located in the page and text-indent:-9999px; so the text is moved off the screen and no longer visible but at least can be read by screen readers and search engines.
This is how I did it, Switch statement
// Get the name of node
$node_name = node_type_get_name($node);
// Then just add the content types you wish to exclude by overwriting the // $title object with an empty string
switch ($node_name) {
case 'Home page':
$title = '' ;
break;
case 'Event':
$title = '';
break;
case 'Offer':
$title = '';
break;
}

Displaying a Drupal content type field outside of a node

I have created a custom field on a content type in Drupal 7 which I need to display outside of the node, in a separate area on the page.
Similar to how the $title variable works (in which you can place this where you like in the page.tpl.php file) I would like to be able to create another variable called $subtitle which would call the data from the current node and allow me to print out the variable in an area on the page.tpl.php file.
I've seen a view examples seeming to use views and blocks to accomplish this task, but that seems a bit excessive and wondered if there was an easier way.
There is an easier way, you do need to bear in mind though that not every page is a node page, and not every node page will be of the right content type so you should be selective. Just add this to your theme's template.php file:
function mytheme_preprocess_node(&$vars) {
$node = $vars['node'];
if ($node->type == 'my_type') {
$vars['subtitle'] = $node->field_my_field[LANGUAGE_NONE][0]['value'];
}
}
Then in page.tpl.php you should do something like this:
if (isset($subtitle)) :
echo $subtitle;
endif;
Make sure you clear your caches (at admin/config/development/performance) once you've implemented the hook in template.php or Drupal won't pick it up.

new content type, with completely blank(body of node only) output theme files

I have a content type that is only used for scripts on my drupal site that should return json data. So the issue then becomes that I can't have any of the theming elements of the site in the output.
So I know I need blank (only the output variable) tpl files for the following:
html.tpl.php
page.tpl.php
region.tpl.php
block.tpl.php
field.tpl.php (the manual says this isn't used but its the only way I could find to remove field divs around the body of my page)
So my question is, how can I create all of the content specific files for this content type? I know its easy to do a theme override in template.php BUT I can only get it to work for html.tpl,page.tpl and thats it. Drupal seems to ignore any content specific functions from region down to field.
I noticed you tagged this drupal-7, which I haven't tried yet. But, in Drupal 6 I would accomplish this by adding a new page template to $vars['template_files'][] in the page preprocess function of template.php. Example:
$node_type = $vars['node']->type;
if ($node_type == '{your content type name here}') {
$vars['template_files'][] = "page-" . $node_type;
}
If your content type was called 'scripts', then Drupal will look for a page called page-scripts.tpl.php, which will contain only one line:
<?php print $content; ?>

Resources