WordPress

WordPressの開発者および管理者向けのQ&A

2
グーテンベルクの使用を検出する方法
Gutenbergと呼ばれる新しいエディターは、4.9ではプラグインとして、5.0ではBlock Editorと呼ばれるコア機能としてここにあります。それに関しては、サイトコンソールで投稿またはページを編集するために使用されるエディターをプログラムで決定することがしばしば必要です。どうやってするの? 更新:同様の質問に対する古い回答がいくつかあります: gutenberg_post_has_blocks() -この関数はGutenbergプラグインにのみ存在し、5.0コアには存在しません is_gutenberg_page() - 同じ the_gutenberg_project() - 同じ has_blocks() -クラシックエディターがオンで、そのオプション "すべてのユーザーのデフォルトエディター" = "ブロックエディター"の場合、機能しません(falseを返します) 答えは単に致命的なエラーを生成しますCall to undefined function get_current_screen() したがって、この質問と回答にコメントする前に、提案内容を確認するための作業を行ってください。4.9と現在のバージョンのWordPress、およびClassic EditorとGutenberg / Block Editorのすべての可能な組み合わせで、今すぐ確認してください。何かへのリンクではなく、テスト済みのソリューションについて説明させていただきます。

4
the_contentが存在しない場合、なぜ脱出するのですか?
組み込み関数the_contentはいくつかのフィルターを通過しますが、出力をエスケープしません。HTMLや一部のスクリプトでさえ許可する必要があるため、そうすることは困難です。 出力時に、the_contentはこれらのフィルターを通過するようです(5.0以降)。 add_filter( 'the_content', 'do_blocks', 9 ); add_filter( 'the_content', 'wptexturize' ); add_filter( 'the_content', 'convert_smilies', 20 ); add_filter( 'the_content', 'wpautop' ); add_filter( 'the_content', 'shortcode_unautop' ); add_filter( 'the_content', 'prepend_attachment' ); add_filter( 'the_content', 'wp_make_content_images_responsive' ); (and) add_filter( 'the_content', 'capital_P_dangit' ); add_filter( 'the_content', 'do_shortcode' ); また、単純な文字列置換も行います。 $content = str_replace( ']]>', ']]>', $content ); そして、get_the_contentは、「more」リンクと外国語のバグに関連する小さな処理を行います。 …
8 security 

1
グーテンベルクサイドバーに追加
Gutenbergインターフェイスの右側にカスタムページオプションを追加する方法を理解しようとしています。コンテンツブロックは必要ないと思います。ページ固有の構成を追加できればよいのですが、正しく機能させることができません。 グーテンベルク以前は、メタボックスを右側に配置することでこれを解決しますが、私が読んでいるところから見ると、メタボックスは今後は悪い習慣になりそうです。

1
これらのフックの仕組みを説明してください
私はフックとアクションについて読みました、そしてdo_action('some_hook')それを見たとき、どこかにadd_action('some_hook', function() {...});または機能some_hook()がテーマのに存在することを意味することを知っていfunctions.phpます。 しかし、それは何ですか?!: woocommerce /含ん/クラス-WC-checkout.phpのライン#943: public function process_checkout() { try { ///////////// do_action( 'woocommerce_before_checkout_process' ); <----!!! if ( WC()->cart->is_empty() ) { throw new Exception( sprintf( __( 'Sorry, your session has expired. <a href="%s" class="wc-backward">Return to shop</a>', 'woocommerce' ), esc_url( wc_get_page_permalink( 'shop' ) ) ) ); } do_action( 'woocommerce_checkout_process' ); …
8 hooks  actions 

1
フロントページにランダムなカテゴリを表示する(テーマ関数の検索と編集)
私は現在、Wordpressテーマの子テーマを編集するアルファ段階にあります。私はプログラミングの経験とワードプレスの管理の経験はありますが、ワードプレス関連のコードを直接編集した経験はありません。現在、最初の3つのカテゴリをアルファベット順に表示しています。 私がやろうとしていること:最初の3つのカテゴリーをアルファベット順に表示する代わりに、xを超える数の製品を含む3つのランダムなカテゴリーを表示したいと思います。 次の障害/質問に遭遇したため、続行できませんでした。 これらのカテゴリーの選択を制御するメカニズム/機能は何ですか?(TheirCode) それはテーマに基づくものですか、それとも基盤となるWordPressシステムに何かありますか? この変更を行うには、他にどのような関連情報がありますか? Firefox Dev Barからどんな情報が役に立つでしょうか? 「TheirCode」を検索して「MyCode」に置き換えるにはどうすればよいですか? ここでの本当の質問は、Firefox Dev Barや実際のソースなどのツールを使用して、この選択を担当する「TheirCode」をどのように見つけるのですか? この質問はWooCommerce(プラグイン)に関するものではありません。WooCommerce(会社)が設計したテーマ、または実際に任意のテーマで機能を見つける方法を探しています。 オープンソースのテーマ:WooCommerce Storefront

1
カスタマイザーのウィジェットを「使い捨て」にすることはできますか(つまり、1つのインスタンスが追加された後に無効化されます)?
私は、カスタムの使い捨てウィジェットを作成するために毎晩クエストをしています。 カスタマイザのサイドバーパネルにそのインスタンスの1つが追加されるとすぐに、[利用可能なウィジェット]パネルのコントロールが無効として表示されます(または、完全に非表示になります)。 これは、次のようになります(右側の視覚的に「無効」なウィジェットに注意してください)。 カスタムウィジェットはすべて登録されていますが、使い捨ての要件に行き詰まっています。 スペック スケールは問題ではありません。登録されているサイドバーを1つだけと仮定しても問題ありません。このアプローチでは、ウィジェットの使用をサイドバーごとに1つ、またはすべての登録済みサイドバーごとに1つに制限することができます。現時点ではどちらも同じように問題ありません。 バックエンドのウィジェットページは問題ありません。これは、バックエンドの[ 外観]の [ ウィジェット]ページで同じように機能する必要はありません。カスタマイザでのみ機能する必要があります。 ご質問 約250年前、すべてのウィジェットは「使い捨て」でした。それらの時代を取り戻し、カスタムウィジェットをWidget APIを介して1回だけ使用する正当な方法を知っている人はいますか? そうでない場合(かなりの量のコアファイルを掘り下げた後で想定しています)、CSSベースのアプローチ(ポインターイベント、疑似要素オーバーレイなど)を使用します。上記のウィジェットのインスタンスが作成されたら、「利用可能な」パネル(右側のパネル)のウィジェットコントロールに専用のCSSクラスを追加/削除する方法に関する基本的なアプローチを使用して、非常に限られたカスタマイザ/ JavaScriptの知識を助けてください。サイドバーパネルに追加/削除されましたか? これまでに試したこと コアファイルのかなりの部分を掘り下げます。 これとこれを読んでください。しかしどちらも実用的ではないようです。 jQueryのイベントに手を加えwidget-added、widget-updated、とwidget-synced、しかし、「ウィジェットを削除」のイベントを欠場。 トンありがとう! 更新:概念実証はまだ公開レポに公開していませんが、もちろん実行します。 解決 以下のクラフトナーが親切に共有したソリューションを、GitHubの概念実証プラグインにラップしました。

2
get_option()はget_transient()にアクセスするよりも高速ですか?
今日、私はdbに対してテストを実行して、オプション、カスタムテーブル、およびトランジェントからのキーへのアクセスの速度の違いを調査します。私はテストを1000回実行しましたが、以下はget操作を1000回実行するのにかかった時間です。 get_transient() 0.0245秒 get_option() 0.0068秒 カスタムテーブルからの単純な選択操作0.65秒 また、このテスト中にトランジェントが期限切れになっていないことを確認しました。だから問題は、テストget_option()よりも速く、get_transient()または私が何かを台無しにしたのですか?WordPressでオプションがデフォルトでキャッシュされるため、カスタムテーブルの遅延はありますか?また、オプションは、トランジェントなどの異なるキャッシュプラグインによってキャッシュされますか?

3
プラグインによって追加されたアイテムの管理メニューでの位置を制御するにはどうすればよいですか?
同じメニュー位置を強制する2つのWPプラグインのStackの別の場所を読んだ場合(1つは表示されない可能性があります)、プラグインによって追加されたメニュー項目の位置をどのように制御できるのか疑問に思っています。 私はすでに「設定」でそのようなサブメニュー項目を処理しているように見える関数と、デフォルト(投稿、ページ、テーマ、プラグイン、設定など)の「トップレベル」項目を並べ替える別の関数を使用していますが、位置は変更しませんプラグインによって追加されたそのようなアイテムの。 function custom_menu_order() { return array( //Add items here in desired order. ); } add_filter( 'custom_menu_order', '__return_true' ); add_filter( 'menu_order', 'custom_menu_order' ); 例として、WooCommerceによって追加された2つのトップレベルメニュー項目のうち、1つはContactForm7によって追加された項目の上に表示され、もう1つは下に表示されます。それに応じてそれらを並べ替えると便利です。また、項目をよりよく並べ替えることもできます。メニューの位置を強制せず、代わりに下部に表示されます。 通常、デフォルトのアイテムと「edit.php?post_type = ...」アイテムを並べ替える場合は問題なく機能しますが、「admin.php?page = ...」のアイテムは並べ替えられません。 並べ替え機能が無効になっている場合、2つのWooCommerceアイテム( 'edit.php?post_type = product'および 'edit.php?post_type = shop_order')は意図したとおりにグループ化されますが、機能が再アクティブ化されると、それらは分割されますContactForm7( 'admin.php?page = wpcf7')によって。 また、WooCommerce CPTの1つ( 'edit.php?post_type = shop_order')は並べ替えられません-もう1つ( 'edit.php?post_type = product')は並べ替えられます。
8 wp-admin 

3
jquery-uiをエンキューする正しい方法
プラグインにjquery-uiスクリプトとスタイルを含めるのに苦労しています。私のwp_enqueue_script通話は単に無視されているようです。 これに似た質問はすでにたくさんありますが、私がこれまでに見つけたすべての回答は、私がすでに行っているアクションフックwp_enqueue_script内で呼び出すために要約されますwp_enqueue_scripts。 私のクラスのコンストラクターでは、次のように呼び出します。 add_action( 'wp_enqueue_scripts', array($this, 'enqueue_scripts') ); そして、以下: public function enqueue_scripts() { wp_enqueue_script( 'jquery-ui-core', false, array('jquery') ); wp_enqueue_script( 'jquery-ui-widget', false, array('jquery') ); wp_enqueue_script( 'jquery-ui-mouse', false, array('jquery') ); wp_enqueue_script( 'jquery-ui-accordion', false, array('jquery') ); wp_enqueue_script( 'jquery-ui-autocomplete', false, array('jquery')); wp_enqueue_script( 'jquery-ui-slider', false, array('jquery')); コードが実際にページが読み込まれるたびに実行されることを確認しました。ただし、ページ<link>にはjquery-uiライブラリのタグがありません。呼び出しのjquery3番目の引数で明示的に指定された依存関係を使用して、または使用せずに、すでに試しましたwp_enqueue_script。 私は、私以外にプラグインをインストールせずに、デフォルトの21の17テーマのみを使用して、単純なWP 4.8インストールを試してみました。サイコロはありません。 私のコードの何が問題になっていますか?
8 jquery-ui 

1
WordPressアップロードディレクトリを再編成することは可能ですか?
すべてのアップロードがにアップロードされているWordPressサイトがあります/wp-content/uploads/*。今では何千もの画像があり、パフォーマンスに打撃があり、それを修正するために私は割り当てられました。 以前にアップロードディレクトリを並べ替えた人はいますか?より構造化されたYYYY / MMに移動しますか?これがどのようにして達成されたかについて、いくつかの戦略を聞きたいです。


1
投稿のコメントをフィルタリングして、ユーザーが自分が書いたコメントのみを表示できるようにすることはできますか?
私はワードプレスとコーディングに比較的慣れていないため、ユーザーが特定の投稿に対してコメントを残す必要があるサイトで作業していますが、サイトを構築している人は、ユーザーがコメントのみを表示できるようにしたいと考えています他のユーザーからのコメントではなく、これらの特定の投稿について書いています。 私は今しばらく探し回っていましたが、うまくいくと思われる解決策を見つけることができませんでした。これを機能させるために、実装するのに十分簡単な方法はありますか?どんな助けでも大歓迎です。 ありがとう!

1
esc_htmlフィルターとattribute_escapeフィルターの違いは何ですか?
esc_htmlとattribute_escapeフィルターの正確な違いは何ですか? esc_html()使用esc_html filterとesc_attr()使用attribute_escape filter。どちらも<>& "'(より小さい、より大きい、アンパサンド、二重引用符、単一引用符)をエンコードします。 彼らがセキュリティの点でどのように正確に異なるのか(脱出)に興味があります。

1
検索クエリのみのposts_whereフィルターを変更する方法
Webでのユーザー検索を変更するためにposts_whereフィルターを使用していますが、「最近の投稿」などの一部のデフォルトウィジェットもこのフィルターを使用しており、その動作も変更されています。ユーザー検索以外のものがposts_whereフィルタを使用することを回避する方法を見つけようとしています。 これは私のコードです: add_filter( 'posts_where' , 'posts_where_statement' ); function posts_where_statement( $where ) { global $wp_query; global $expp; global $wpdb; $local_db = $wpdb->prefix."posts"; $front_page_id = get_option('page_on_front'); if ( ('page' != get_option('show_on_front') || $front_page_id != $wp_query->query_vars['page_id']) && (!($wp_query->is_search)) ) return $where; //some $where modifications remove_all_actions ( '__after_loop'); return $where; } 他の関数、またはこのフック/フィルターを検索クエリでのみ機能させる方法はありますか?(ユーザー入力から結果をフェッチするもの)

4
get_posts()でmeta_query引数のエイリアスを設定します
を実行するときにmeta_query引数にエイリアスを設定する方法はありget_posts()ますか?クエリの1つでパフォーマンスが低下しています。最適化するには、1つだけ必要なときに3つのテーブルを結合するのではなく、同じ結合テーブルを再利用できる必要があります。 私の現在の例... $args = array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'abc_type', 'value' => array('puppy', 'kitten'), 'compare' => 'IN', ), array( 'relation' => 'OR', array( 'relation' => 'AND', array( 'key' => 'abc_type', 'value' => 'puppy', 'compare' => '=', ), array( 'key' => 'abc_color', 'value' => 'pink', 'compare' …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.