What is the right way to set up a one-page portfolio theme? [closed]

There is no RIGHT way to do this, instead there might be more efficient ways and or preferred ways to do this over another but even then, that does not make any of them more right than the other.

I say this just to clear to air in case you and or others take any “selected” answer as being gospel because there are many ways to skin a cat achieve an presentational layout with WordPress.

Conforming to best practice standards via the use of WordPress API functions and conditional tags is what’s most important here. Everything else is a matter of opinion and taste.

Firstly,

Contact Form 7 can be embedded into any Post or Page you choose.

Secondly,

It appears you are confusing the term Page Template with the term Page.

You can think of a Page in WordPress as something like your About, Services, Contact page that you would commonly see on sites. These pages appear as separate entities beyond your homepage.

Pages can literally be anything you want them to be.

Most importantly,

Any Page you create in WordPress can be assigned as your front page, thus becoming the first thing people see when they land on your top level domain. This is known as a static page, but although the page is static, its only in terms of the page in which is shown, it does not refer to the data which appears on that page which can be as entirely dynamic and creative as you wish.

And to clarify,

You said…

The reason I’d use a page template and not index is that Contact Form 7 requires it (assuming I understand it correctly…but perhaps I don’t). – Brian O’Neill

You might be confusing the term Page Templates with the term Page as a Page Template is something you can assign to any Page you create to help define its style, presentation and layout of data from other Pages.

As mentioned above Contact Form 7 can be embedded into any Post or Page you choose by using a shortcode that you can place into the content area of your post edit screen,

Example:

[contact-form-7 id="1234" title="Contact form 1"]

This example shortcode would make reference to a form you create with an ID 1234 and in turn that form will be displayed on that page.

Similarly you can embed multiple forms onto one Page, or different forms on as many Pages or Posts needed.

But there’s more,

You can also embed a form from Contact Form 7 elsewhere in your theme and it need not necessarily be in a Post or Page. It could be in your index.php file. It could be in a sidebar.php or any other template file you might create to serve a particular purpose and you can achieve that by embedding the following code into your theme file like so;

<?php echo do_shortcode('[contact-form-7 id="1234" title="Contact form 1"]') ;?>

Shortcodes on their own as shown in my first snippet can’t be used outside of your post/page content when in the post editor screen in your dashboard. However when you wrap your shortcode in the [do_shortcode][5] function above, you can execute any shortcode normally reserved for use in the post editor screen in any other template file in your theme.

This means you could in fact use your index.php to serve your entire site and in combination from within your index.php you can include various other template files to serve the various conditions you need.

So you might have a theme folder that looks like,

//Folder structure (regular theme files omitted for brevity)

index.php
   - template-about.php
   - template-blog.php
   - template-gallery.php
   - template-services.php

Then within your index.php you might have code resembling,

<?php

//All HTML markup omitted for brevity!

  <!-- start of header -->   

  get_header();

    <!-- start of about you -->

    get_template_part( 'template', 'about' );

    <!-- start of services -->

    get_template_part( 'template', 'services' );

    <!-- start of gallery -->

    get_template_part( 'template', 'gallery' );

    <!-- start of blog posts -->

    get_template_part( 'template', 'blog' );

            <!-- including your Contact Form 7 via do_shortcode -->

            echo do_shortcode('[contact-form-7 id="1234" title="Contact form 1"]');

  <!-- start of footer -->

  get_footer();

?>

Using the get_template_part function you can call from within another file (in this case your index.php file) that of another file which contains presentational data and logic to help create your desired result whatever that may be.

This helps with your organizational structure, keeping your main index.php file as lean as possible as well as a host of other potential benefits.

How you choose to present your blog posts from your other WordPress site depends on what you mean by pull in as it could mean either,

  • Pull full blog post from external site and insert into a post (in the database) of the new site and then query your new site using a loop to show posts.

  • Pull full blog post from external site without inserting it into your new site’s database, thus requiring that your new site queries your other site each time someone visits your site.

  • Pull a partial excerpt with title and link to external site showing full post

  • Or a number of other interpretations…

RSS Feeds are one way (as suggested), XML-RPC is another and there are more ways to go about this some more complex than others but which may suit different purposes more than another.

As I said, many ways to do things in WordPress, being the great power of it, however what I’ve mentioned here is by far not the only way means or method by which you can abstract data from WordPress…

For instance using get_template_part may not be necessary in some cases, but instead using a WP_Query to pull in Page or Post content may be more suitable where instead you would create your pages via the WordPress dashboard and call them through a loop.

Or to add to the mix, you might use a combination of both be it independently of one another or dependent on another such as using WP_Query to call a page’s content from within a template file used with a get_template_part function and so on and so on and so on…

Familiarizing yourself with Stepping Into Templates is a good place to start and learning about the enter link description here