質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

3210閲覧

ショートコードを入れようとして、function.phpに入れたらレイアウト崩れした

chNOBUNAGA

総合スコア41

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/06/22 15:17

function.phpを編集したら、レイアウト崩れしました。以下、追加部分のみ

PHP

1function shortcode_project($atts, $content = null) { 2 extract(shortcode_atts(array( 3 "ex" => '', 4 "type" => 'project' 5 ), $atts)); 6 global $post; 7 $myposts = get_posts('numberposts=-1&order=ASC&post_type='.$type.'&exclude='.$ex); 8 $retour='<form method="get" action="'.home_url('/').'"> 9 10 <input type="text" name="s" value="'.the_search_query().'" placeholder="??" /> 11 <input type="hidden" name="post_type" value="project"> 12 <input type="submit" value="??" /> 13 </form><ul>'; 14 15 foreach($myposts as $post) : 16 if(!is_subpage()) { 17 setup_postdata($post); 18 if(has_tag('1')){ 19 20 $retour.='<div class="side-corner-tag"><div class="block2"><a href="'.get_permalink().'">'.get_the_post_thumbnail( $page->ID, 'thumbnail' ).the_title("","",false).get_the_content("Continue reading " . get_the_title()).'<a class="button" href="'.get_permalink().'"></a></div></a></div><p><span></span></p></div> '; 21 22} 23 24else{ 25 $retour.='<div class="block"><a href="'.get_permalink().'">'.get_the_post_thumbnail( $page->ID, 'thumbnail' ).the_title("","",false).get_the_content("Continue reading " . get_the_title()).'</a></div> '; 26 27} 28 29} 30 endforeach;wp_reset_postdata(); 31 return $retour; 32} 33 34add_action( 'wp_enqueue_scripts', 'business_one_page_scripts' ); 35 36/** 37 * Custom template tags for this theme. 38 */ 39require get_template_directory() . '/inc/template-tags.php'; 40 41/** 42 * Custom functions that act independently of the theme templates. 43 */ 44require get_template_directory() . '/inc/extras.php'; 45 46/** 47 * Customizer additions. 48 */ 49require get_template_directory() . '/inc/customizer.php'; 50 51/** 52 * Load Jetpack compatibility file. 53 */ 54require get_template_directory() . '/inc/jetpack.php'; 55 56/** 57 * Post Meta Box 58 */ 59require get_template_directory() . '/inc/metabox.php'; 60 61/** 62 * Widget Recent Post 63 */ 64require get_template_directory() . '/inc/widget-recent-post.php'; 65 66/** 67 * Widget Popular Post 68 */ 69require get_template_directory() . '/inc/widget-popular-post.php'; 70 71/** 72 * Widget Social Links 73 */ 74require get_template_directory() . '/inc/widget-social-links.php'; 75 76/** 77 * Multiple Image Field 78 * 79 * @link https://github.com/lucatume/wp-customizer 80 */ 81require get_template_directory() . '/inc/multiimage-custom-control.php'; 82 add_shortcode('project', 'shortcode_project'); 83 84get_template_part('create-project'); 85get_template_part('create-proposal');

ちなみに、関数部分を echo 'aaa';のみにすると正常に動作しました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/06/22 15:22

過去の質問に何の返信もされていませんが、解決していないのであればその状況をコメントなどで入れてください。解決したのであれば「解決済」にしてください。
chNOBUNAGA

2016/06/22 15:24

すいません、忘れておりました 解決したもののみ、解決済みにいたしました
kei344

2016/06/23 02:37

解決されたのであれば「解決済」にしてください。
guest

回答2

0

こちらのソースコードは、どこかからのコピペでしょうか?
色々と間違いがあるように見受けれらます。

  • </form><ul> となっている箇所があるが、</ul> がない
  • </div></a></div><p><span></span></p></div> となっている箇所があるが、</a></div></div><p><span></span></p> が正解だと思われる。ちなみに <p><span></span></p> は不要ではないでしょうか?
  • ループ内で $page を使用しているが、$post が正解だと思われる。
  • global 宣言している $post は不要ではないでしょうか?
  • $myposts で使用している、$type$ex の値が検証されていないため、セキュリティ上危ない気がする。
  • shortcode_project() 関数の第二引数は使用されていないため不要。

崩れているのは、エラーのせいもあるかもしれませんが、HTML の文法エラーでもあると思われます。

テストしていませんが、こんなんでいかがでしょうか?ただ、$myposts で使用している、$type$ex の値を検証していません。どのような値が入ってくるのか不明なため、ご自身でエスケープや置換処理してください。WordPress には、いくつものサニタイズ関数が用意されているので、特殊な値ではないのであれば、それを利用するのがよいと思います。

php

1function shortcode_project( $atts ) { 2 extract( shortcode_atts( array( 3 "ex" => '', 4 "type" => 'project' 5 ), $atts ) ); 6 7 $myposts = get_posts( 'numberposts=-1&order=ASC&post_type=' . $type . '&exclude=' . $ex ); 8 $retour[] = '<form method="get" action="' . home_url( '/' ) . '">'; 9 $retour[] = '<input type="text" name="s" value="' . the_search_query() . '" placeholder="??" />'; 10 $retour[] = '<input type="hidden" name="post_type" value="project">'; 11 $retour[] = '<input type="submit" value="??" />'; 12 $retour[] = '</form>'; 13 14 foreach ( $myposts as $post ) : 15 if ( ! is_subpage() ) { 16 setup_postdata( $post ); 17 if ( has_tag( '1' ) ) { 18 $retour[] = '<div class="side-corner-tag">'; 19 $retour[] = '<div class="block2">'; 20 $retour[] = '<a href="' . get_permalink() . '">'; 21 $retour[] = get_the_post_thumbnail( $post->ID, 'thumbnail' ); 22 $retour[] = the_title( "", "", false ); 23 $retour[] = get_the_content( "Continue reading " . get_the_title() ); 24 $retour[] = '<a class="button" href="' . get_permalink() . '"></a>'; 25 $retour[] = '</a>'; 26 $retour[] = '</div>'; 27 $retour[] = '</div>'; 28 } else { 29 $retour[] = '<div class="block">'; 30 $retour[] = '<a href="' . get_permalink() . '">'; 31 $retour[] = get_the_post_thumbnail( $post->ID, 'thumbnail' ); 32 $retour[] = the_title( "", "", false ); 33 $retour[] = get_the_content( "Continue reading " . get_the_title() ); 34 $retour[] = '</a>'; 35 $retour[] = '</div>'; 36 } 37 } 38 endforeach; 39 wp_reset_postdata(); 40 41 return implode( PHP_EOL, $retour ); 42}

投稿2016/06/23 19:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

$retour= の部分の複数行入れようとしている箇所が問題です。$retour= から ; までの改行を無くすか、ヒアドキュメントをお使いください。


【ヒアドキュメント | PHP Labo】
http://www.php-labo.net/tutorial/php/heredocument.html

【PHPの基本構文「ヒアドキュメント」 - PHP入門 - Webkaru】
http://webkaru.net/php/here-document/

【PHP ヒアドキュメントの使い方:2通り - すたら日記】
http://d.hatena.ne.jp/sutara_lumpur/20080803/1217724875

投稿2016/06/22 15:53

kei344

総合スコア69366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chNOBUNAGA

2016/06/22 15:56

すいません。 $retourとは何行目でしょうか?
chNOBUNAGA

2016/06/22 15:58

仮にreturn $retour; を消しても乱れてしまいます
chNOBUNAGA

2016/06/22 16:00

改行を消しましたが、改善されませんでした、
kei344

2016/06/22 16:03

$retour= の箇所は提示されているコードの中に1箇所しかありませんが、もしかして提示されたコード以外の部分を探されていませんか? 近いものは $retour.= くらいですが、そこは複数行を入れている箇所ではありませんし・・・。
chNOBUNAGA

2016/06/22 16:08

ASCLLでおかしくなってましたありがとうございます
kei344

2016/06/22 16:11

//エラー出力強制 ini_set( 'display_errors', 1 ); // エラーを画面に表示(1を0にすると画面上にはエラーは出ない) //すべてのエラー表示 error_reporting( E_ALL ); function.phpの最初のほうにこれを書いて、エラーが出ますか? また、崩れた部分の「出力されたHTML」(ブラウザで「ページのソースを表示」)を質問文に追記ください。
kei344

2016/06/22 16:11

ASCLLとはなんでしょうか。
退会済みユーザー

退会済みユーザー

2016/06/23 18:30

横槍失礼します。 WordPress でのエラー表示は、規定の定数があるのでそれを使います。 ```php define( 'WP_DEBUG', true ); define( 'WP_DEBUG_DISPLAY', WP_DEBUG ); define( 'WP_DEBUG_LOG', WP_DEBUG ); ``` 各定数の意味は codex をご覧ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問