alink ) { if ( $type === SEO_Links::TYPE_INTERNAL ) { return \url_to_postid( $permalink ); } return $this->image_helper->get_attachment_by_url( $permalink ); } /** * Creates an internal link. * * @param string $url The url of the link. * @param array $home_url The home url, as parsed by wp_parse_url. * @param Indexable $indexable The indexable of the post containing the link. * @param bool $is_image Whether or not the link is an image. * @param int $image_id The ID of the internal image. * * @return SEO_Links The created link. */ protected function create_internal_link( $url, $home_url, $indexable, $is_image = false, $image_id = 0 ) { $parsed_url = \wp_parse_url( $url ); $link_type = $this->url_helper->get_link_type( $parsed_url, $home_url, $is_image ); /** * ORM representing a link in the SEO Links table. * * @var SEO_Links $model */ $model = $this->seo_links_repository->query()->create( [ 'url' => $url, 'type' => $link_type, 'indexable_id' => $indexable->id, 'post_id' => $indexable->object_id, ] ); $model->parsed_url = $parsed_url; if ( $model->type === SEO_Links::TYPE_INTERNAL ) { $permalink = $this->build_permalink( $url, $home_url ); return $this->enhance_link_from_indexable( $model, $permalink ); } if ( $model->type === SEO_Links::TYPE_INTERNAL_IMAGE ) { $permalink = $this->build_permalink( $url, $home_url ); /** The `wpseo_force_creating_and_using_attachment_indexables` filter is documented in indexable-link-builder.php */ if ( ! $this->options_helper->get( 'disable-attachment' ) || \apply_filters( 'wpseo_force_creating_and_using_attachment_indexables', false ) ) { $model = $this->enhance_link_from_indexable( $model, $permalink ); } else { $target_post_id = ( $image_id !== 0 ) ? $image_id : WPSEO_Image_Utils::get_attachment_by_url( $permalink ); if ( ! empty( $target_post_id ) ) { $model->target_post_id = $target_post_id; } } if ( $model->target_post_id ) { $file = \get_attached_file( $model->target_post_id ); if ( $file ) { if ( \file_exists( $file ) ) { $model->size = \filesize( $file ); } else { $model->size = null; } list( , $width, $height ) = \wp_get_attachment_image_src( $model->target_post_id, 'full' ); $model->width = $width; $model->height = $height; } else { $model->width = 0; $model->height = 0; $model->size = 0; } } } return $model; } /** * Enhances the link model with information from its indexable. * * @param SEO_Links $model The link's model. * @param string $permalink The link's permalink. * * @return SEO_Links The enhanced link model. */ protected function enhance_link_from_indexable( $model, $permalink ) { $target = $this->indexable_repository->find_by_permalink( $permalink ); if ( ! $target ) { // If target indexable cannot be found, create one based on the post's post ID. $post_id = $this->get_post_id( $model->type, $permalink ); if ( $post_id && $post_id !== 0 ) { $target = $this->indexable_repository->find_by_id_and_type( $post_id, 'post' ); } } if ( ! $target ) { return $model; } $model->target_indexable_id = $target->id; if ( $target->object_type === 'post' ) { $model->target_post_id = $target->object_id; } if ( $model->target_indexable_id ) { $model->language = $target->language; $model->region = $target->region; } return $model; } /** * Builds the link's permalink. * * @param string $url The url of the link. * @param array $home_url The home url, as parsed by wp_parse_url. * * @return string The link's permalink. */ protected function build_permalink( $url, $home_url ) { $permalink = $this->get_permalink( $url, $home_url ); if ( $this->url_helper->is_relative( $permalink ) ) { // Make sure we're checking against the absolute URL, and add a trailing slash if the site has a trailing slash in its permalink settings. $permalink = $this->url_helper->ensure_absolute_url( \user_trailingslashit( $permalink ) ); } return $permalink; } /** * Filters out links that point to the same page with a fragment or query. * * @param SEO_Links $link The link. * @param array $current_url The url of the page the link is on, as parsed by wp_parse_url. * * @return bool Whether or not the link should be filtered. */ protected function filter_link( SEO_Links $link, $current_url ) { $url = $link->parsed_url; // Always keep external links. if ( $link->type === SEO_Links::TYPE_EXTERNAL ) { return true; } // Always keep links with an empty path or pointing to other pages. if ( isset( $url['path'] ) ) { return empty( $url['path'] ) || $url['path'] !== $current_url['path']; } // Only keep links to the current page without a fragment or query. return ( ! isset( $url['fragment'] ) && ! isset( $url['query'] ) ); } /** * Updates the link counts for related indexables. * * @param Indexable $indexable The indexable. * @param SEO_Links[] $links The link models. * * @return void */ protected function update_related_indexables( $indexable, $links ) { // Old links were only stored by post id, so remove all old seo links for this post that have no indexable id. // This can be removed if we ever fully clear all seo links. if ( $indexable->object_type === 'post' ) { $this->seo_links_repository->delete_all_by_post_id_where_indexable_id_null( $indexable->object_id ); } $updated_indexable_ids = []; $old_links = $this->seo_links_repository->find_all_by_indexable_id( $indexable->id ); $links_to_remove = $this->links_diff( $old_links, $links ); $links_to_add = $this->links_diff( $links, $old_links ); if ( ! empty( $links_to_remove ) ) { $this->seo_links_repository->delete_many_by_id( \wp_list_pluck( $links_to_remove, 'id' ) ); } if ( ! empty( $links_to_add ) ) { $this->seo_links_repository->insert_many( $links_to_add ); } foreach ( $links_to_add as $link ) { if ( $link->target_indexable_id ) { $updated_indexable_ids[] = $link->target_indexable_id; } } foreach ( $links_to_remove as $link ) { if ( $link->target_indexable_id ) { $updated_indexable_ids[] = $link->target_indexable_id; } } $this->update_incoming_links_for_related_indexables( $updated_indexable_ids ); } /** * Creates a diff between two arrays of SEO links, based on urls. * * @param SEO_Links[] $links_a The array to compare. * @param SEO_Links[] $links_b The array to compare against. * * @return SEO_Links[] Links that are in $links_a, but not in $links_b. */ protected function links_diff( $links_a, $links_b ) { return \array_udiff( $links_a, $links_b, static function( SEO_Links $link_a, SEO_Links $link_b ) { return \strcmp( $link_a->url, $link_b->url ); } ); } /** * Returns the number of internal links in an array of link models. * * @param SEO_Links[] $links The link models. * * @return int The number of internal links. */ protected function get_internal_link_count( $links ) { $internal_link_count = 0; foreach ( $links as $link ) { if ( $link->type === SEO_Links::TYPE_INTERNAL ) { ++$internal_link_count; } } return $internal_link_count; } /** * Returns a cleaned permalink for a given link. * * @param string $link The raw URL. * @param array $home_url The home URL, as parsed by wp_parse_url. * * @return string The cleaned permalink. */ protected function get_permalink( $link, $home_url ) { // Get rid of the #anchor. $url_split = \explode( '#', $link ); $link = $url_split[0]; // Get rid of URL ?query=string. $url_split = \explode( '?', $link ); $link = $url_split[0]; // Set the correct URL scheme. $link = \set_url_scheme( $link, $home_url['scheme'] ); // Add 'www.' if it is absent and should be there. if ( \strpos( $home_url['host'], 'www.' ) === 0 && \strpos( $link, '://www.' ) === false ) { $link = \str_replace( '://', '://www.', $link ); } // Strip 'www.' if it is present and shouldn't be. if ( \strpos( $home_url['host'], 'www.' ) !== 0 ) { $link = \str_replace( '://www.', '://', $link ); } return $link; } /** * Updates incoming link counts for related indexables. * * @param int[] $related_indexable_ids The IDs of all related indexables. * * @return void */ protected function update_incoming_links_for_related_indexables( $related_indexable_ids ) { if ( empty( $related_indexable_ids ) ) { return; } $counts = $this->seo_links_repository->get_incoming_link_counts_for_indexable_ids( $related_indexable_ids ); foreach ( $counts as $count ) { $this->indexable_repository->update_incoming_link_count( $count['target_indexable_id'], $count['incoming'] ); } } } nasser ، كاتب في أزاميل : الصفحة 152 من 521

nasser

شاعر وكاتب وإعلامي عربي

بالفديو:التحالف الدولي يمنح العراق ملياري دولار ودعوة لانفتاح العراق على العالم ونبذ الخلافات الطائفية

يستعد التحالف الدولي ضد تنظيم داعش الإرهابي بدعوة من الولايات المتحدة، لاستعادة معاقل “الجهاديين” في الموصل العراقية والرقة السورية وتحريرها من قبضة التنظيم. ودعا وزير الخارجية الأمريكي جون كيري في الاجتماع …

أكمل القراءة »

خطيب جمعة يحذر من انتشار أمراض جنسية بسبب العلاقات اللا أخلاقية بسبب السياحة في الأهوار !

الأهوار

خطيب الرحمن يتحدث عن “آثار سلبية ” للسياحة في الاهوار أزاميل/ بغداد أكد إمام وخطيب جامع الرحمن في بغداد اليوم الجمعة، أن أكثر من 8 ملايين مواطن عراقي يعيشون تحت …

أكمل القراءة »

شاهد متابعة مباشرة:إطلاق نار في ميونخ وأنباء عن إطلاق نار في 3 أماكن متفرقة وسقوط 15 قتيلا

شاهد متابعة مباشرة:إطلاق نار في ميونخ وأنباء عن إطلاق نار في 3 أماكن متفرقة وسقوط 15 قتيلا برلين – وكالات دعت شرطة ميونيخ السكان للبقاء في منازلهم أو الاختباء في …

أكمل القراءة »

شاهد اللحظات الأولى لعملية داخل مركز تجاري كبير وسط مدينة ميونيخ الالمانية “خبر يجري تحديثه باستمرار”

أكمل القراءة »

دعوة لاكتشاف قوانين الشهوة العربية: بين إنقلاب أردوغان وذبح طفل فلسطيني على يد بعض عشاقه

دعوة لاكتشاف قوانين الشهوة العربية: بين إنقلاب أردوغان وذبح طفل فلسطيني على يد بعض عشاقه كتب منصور الناصر/ نحن شعوب ترفض الحقيقة..تخشاها بشدة، ولذلك نجدها مستعدة لتشويهها في أية لحظة …

أكمل القراءة »

السفارة الأميركية في السعودية تحذر مواطنيها من تعرضهم لـ”تهديد وشيك” في جدة

السفارة الأميركية بالسعودية تحذر مواطنيها من “تهديد محتمل وشيك” في جدة حذرت السفارة الأميركية في السعودية، اليوم الخميس، مواطنيها من “تهديد محتمل وشيك” في مدينة جدة. وقالت السفارة بحسب “رويترز”، إنها …

أكمل القراءة »

بالفيديو: ﻋﻠﻲ ﺍﻻﺩﻳﺐ:ﻳﻄﺎﻟﺐ في البرلمان بوضع حد لمجانية التعليم وخاصة في الجامعات! ويصدر توضيحا

  ﻋﻠﻲ ﺍﻻﺩﻳﺐ:ﻳﻄﺎﻟﺐ في ﻣﺠﻠﺲ ﺍﻟﻨﻮﺍﺏ بوضع حد لمجانية التعليم وخاصة في الجامعات اصدر رئيس كتلة دولة القانون البرلمانية علي الأديب، الخميس، توضيحا بشأن مقطع فيديو نسب له تحدث فيه …

أكمل القراءة »

من الطبخ إلى الذبح: حركة تذبح طفلا وتحمل اسم الملك نور الدين زنكي الذي سبق له أن طبخ طفلاً !

عن ذبح الطفولة و”طبخها”! الذبيح عبد الله عيسى 12 عاماً المصاب برصاصة بفخذه يستسلم لسكاكين الزنكي الذباح متين النحلاوي ونور الدين زنكي، الذي تحمل اسمه المعارضة المعتدلة التي ذبحت طفلا …

أكمل القراءة »

منصور الناصر:ماذا تبقى من أخلاقنا و”ديننا” بعد ذبح”معتدلين” لطفل عمره12 عاما؟ +18

  بماذا تختلف المعارضة المعتدلة التي ذبحت طفلا في الـ12 من عمره عن الذين ذبحوا 1700 شاب في سبايكر؟ كم تشبه احداث اليوم عما حصل قبل عامين وقبل عقدين وحتى …

أكمل القراءة »

من هو أردوغان الذي طرد من الجيش لأنه لم يحلق شاربه؟”3 فيديو”

من هو رجب طيب أردوغان؟ هذه سيرة نشرها أحد المعجبين به سنة 2011.. وبالطبع هناك سيرة تعارضها من قبل منافسيه وسننشرها لاحقا لكي نستطيع الحكم بحيادية رجب طيب أردوغان ولد …

أكمل القراءة »

صدمة هائلة بعد تداول مقطع فيديو لذبح طفل عمره 12 عاما على يد المعارضة المعتدلة

  انتشرت على مواقع التواصل الاجتماعي مقاطع فيديو لمسلحين يعتقد أنهم من المعارضة السورية في حلب أثناء قطع رأس طفل في 12 من عمره لأنه “يقاتل إلى جانب القوات الموالية …

أكمل القراءة »

بلجيكا تعتقل 10 لاجئين عراقيين ترعاهم امرأة مغربية للاشتباه بصلتهم بتنظيم داعش

اعتقلت الشرطة البلجيكية 10 لاجئين عراقيين للاشتباه بصلتهم بتنظيم “الدولة الإسلامية” الإرهابي، وفقا لما أفادت به صحيفة “Gazette”، الأربعاء 20 يوليو/تموز. وبحسب الصحيفة فإن الشرطة أطلقت سراح أحد المعتقلين بعد …

أكمل القراءة »