WordPressのテーマSydneyのLatest Newsウィジェットのカスタマイズがうまくいかないので、つい最近まで子テーマではなく親テーマのLatest Newsウィジェットを書き換えて対応していましたが、テーマの更新の度に書き換えるのが面倒なので、再度試してみて、子テーマでウィジェットのLatest Newsをカスタマイズすることができました(と思ったのですが、微妙な結果です)。
おおまかな手順は、以前も記したSydneyのフォーラムで紹介されている1〜6です。https://forums.athemes.com/t/more-posts-shown-on-latest-news-widget/6633/2
ですが、現在のテーマのfunctions.phpには手順4に記されている、siteorigin_panels_activateという関数がありません。改めてfunctions.phpを見返してみたところ、137行目あたりからフロントページウィジェットをロードする箇所があり、if ( defined( ‘SITEORIGIN_PANELS_VERSION’ ) ) のコードに変更されているようでした。
手順1〜6を書き直すと以下。
- 子テーマを作る(sydney-child)
- 親テーマの widgets/fp-latest-news.php を複製して、子テーマ/widgetsディレクトリに配置する
- 子テーマの fp-latest-news.php を開いて改変したい箇所を修正する。
例えば、1行に表示させる記事数を3→4にするのであれば、以下の2行
1)修正前:'posts_per_page' => 3,
修正後:'posts_per_page' => 4,
2)修正前:<div class="blog-post col-md-4 col-sm-6 col-xs-12">
修正後:<div class="blog-post col-md-3 col-sm-6 col-xs-12">
例えば、6記事表示させたいのであれば、以下
修正前:'posts_per_page' => 3,
修正後:
'posts_per_page' => 6,
- 子テーマの functions.php に以下を追加する(前者ではなく、後者)
if ( function_exists('siteorigin_panels_activate') ) {
require_once get_template_directory() . "-child/widgets/fp-latest-news.php";
}
if ( defined( 'SITEORIGIN_PANELS_VERSION' ) ) {
require_once get_template_directory() . "-child/widgets/fp-latest-news.php";
}
- 子テーマを有効にしてサイトを表示させると、Fatal Errorメッセージが表示されブランクページしか表示されません。(すでにft-latest-news.phpは定義されているというようなメッセージが表示された)
- 上記5を解決するために、親テーマのfunctions.phpを開き、Latest Newsウィジェットを読み込んでいる行をコメントアウトします。
修正前:require_once get_template_directory()."/widgets/fp-latest-news.php";
修正後:// require_once get_template_directory()."/widgets/fp-latest-news.php";
フォーラムの記載通りに改変できたわけですが、終わってみて、ふと気づきました。親テーマのfunctions.phpを変更しているので、親テーマを更新する度にコメントアウトがはずれるのでFatal Errorになってしまうわけですよねorz… であれば、親テーマのLatest Newsウィジェットのコードを変更した方がまだ影響が少なくてよいような気もしました。